- ベストアンサー
VBA(Access)でバイナリデータから生年月日を取得!
- VBA(Access)でバイナリデータから生年月日を取得する方法が知りたいです。
- C++で行っていた作業をVBA(Access)で行う必要があり困っています。具体的なコード例も教えてください。
- データを取得しても化け文字で表示され、どのように処理すればいいかわかりません。アドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問文に掲載されている C のソースでは int は 4 byte のようですが、VBA では Integer は 2 byte なので、4 byte の Long を使用して読み込むことができます。 Dim lngDate As Long Dim iFileNo As Integer iFileNo = FreeFile Open "Path.dat" For Binary As #iFileNo Seek #iFileNo, 5 * 16 + 5 + (16 * 21 + 6) - 3 Get #iFileNo, , lngDate Close #iFileNo Debug.Print lngDate
その他の回答 (1)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
C言語のchar型は文字列ではなく本当はバイト型なのです。 また、VB,VBAのString型は文字に出来ないバイナリデータを捨ててしまいます。 なので、VBではバイト型の配列に読込みます。 Dim buf(800) As Byte '''ファイルサイズ以上の配列を宣言すること。 Dim p as Long Dim d as Long Open "Path.dat" For Binary As FreeFile Get # FreeFile, , buf p = 5*16+5+(16*21+6) - 4 d = 16777216*buf(p+3)+65536*buf(p+2)+256*buf(p+1)+buf(p) Print d pはデータファイル内の日付データが始まる位置(0から始まるバイト位置)を指定します。 cのソースを参考にしたが、ずれているかも知れません。 dの値がおかしかったら調整してください。
補足
ご回答ありがとうございます。 Longタイプの"d"の項目がオーバーフローで落ちてしまします。 >d = 16777216*buf(p+3)+65536*buf(p+2)+256*buf(p+1)+buf(p) 上記の計算は何を指しておりますか?