Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


51302 / 76732 ←次へ | 前へ→

【30301】Re:Byte型について 参加
発言  ichinose  - 05/10/24(月) 19:49 -

引用なし
パスワード
   ▼わさび さん、小僧さん、でれすけさん、こんばんは。

>回答をお寄せいただき、ありがとうございます。
>おふたりのお話は私には高度すぎて理解できない部分が多いですのですが、
>なんとなくわかってきたような気もします。
>
>Openステートメントをヘルプで調べたら、
>「filenumber」を「1〜511の範囲で任意のファイル番号を指定する」部分で、
>Byte型が関わってくるんですね。
>そして「1〜511」を範囲として含むので、
>Integer型でも、はたまたLong型でも
>ファイルサイズが偶数もしくは4の倍数なら大丈夫…という考えでよいのでしょうか。
う〜ん、確かにそうなんですが・・・。
これは、「今回の事例は、BianryモードげGetしてそのままPutするわけで、
その意味ではInteger型でも問題はありません。」
という限定であって、実際にバイナリーファイルをInteger型で
読み込む事ということはしませんね!!
なぜなら、

例えば、


以下のコードを実行して下さい。

'==================================================
Sub test1()
  Dim fno As Long
  Dim wbyte() As Byte
  fno = FreeFile()
  On Error Resume Next
  Kill ThisWorkbook.Path & "\test.bin"
  Open ThisWorkbook.Path & "\test.bin" For Binary As #fno
  ReDim wbyte(1)
  wbyte(0) = &H2
  wbyte(1) = &H1
  Put fno, , wbyte()
  Close #fno
End Sub

これは、ヘキサコードで、0201hという2バイト分のデータをファイルTest.Binに書き込んだコードです。
バイナリエディタ等で確認してみてください。
尚、Thisworkbook.Pathを使っているので一度マクロを含むブックは保存してから
実行してください。

次に
'=======================================================
Sub test2()
  Dim fno As Long
  Dim wbyte() As Byte
  fno = FreeFile()
  Open ThisWorkbook.Path & "\test.bin" For Binary As #fno
  ReDim wbyte(1)
  Get #fno, , wbyte()
  Close #fno
  MsgBox wbyte(0) & "---" & wbyte(1)
  
End Sub


これは、確認のために読み込んでみたコードです。

wbyte(0)には、2H Wbyte(1)には、1H
が格納され、正しくファイルが作成された事が確認できます。


では、次に同じファイルを

'============================================================
Sub test3()
  Dim fno As Long
  fno = FreeFile()
  Dim dat As Integer
  Dim dat2 As Integer
  Open ThisWorkbook.Path & "\test.bin" For Binary As #fno
  Get fno, , dat
  Close #fno
  MsgBox dat
End Sub


Integer型の変数で読み込むと
258なんてどこから来たのかと思うような値が表示されますよね?


ファイル内で0201Hの2バイトは、Integer型の変数に読み込まれると、
Integer型の内部では0102hとして格納されます。

よって、16進数で0102は、10進数の258ですから、そう表示されるのですが・・。

バイナリーファイルというのは、設計によっては、0201Hに意味がある場合も
ありますから、Integer型で読み込むというのは、特殊な場合に限りますよ!!
2 hits

【30205】このコードは高速化可能か ken 05/10/21(金) 16:34 質問
【30207】Re:このコードは高速化可能か 角田 05/10/21(金) 17:42 回答
【30208】Re:このコードは高速化可能か ken 05/10/21(金) 18:23 質問
【30209】Re:このコードは高速化可能か 角田 05/10/21(金) 18:50 回答
【30210】Re:このコードは高速化可能か ken 05/10/21(金) 19:02 お礼
【30254】Byte型について わさび 05/10/24(月) 8:34 質問
【30280】Re:Byte型について 小僧 05/10/24(月) 13:15 発言
【30293】Re:Byte型について でれすけ 05/10/24(月) 16:48 発言
【30299】Re:Byte型について わさび 05/10/24(月) 18:44 質問
【30301】Re:Byte型について 参加 ichinose 05/10/24(月) 19:49 発言
【30355】Re:Byte型について 参加 わさび 05/10/25(火) 18:24 お礼
【30359】Re:Byte型について 参加 ichinose 05/10/25(火) 19:23 発言
【30368】Re:Byte型について 参加 わさび 05/10/26(水) 8:30 お礼
【30314】Re:Byte型について でれすけ 05/10/25(火) 9:45 発言
【30358】Re:Byte型について わさび 05/10/25(火) 19:04 お礼

51302 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free