Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Excel 2016)
binaryデータサイズ
投稿日時: 21/06/08 17:55:03
投稿者: twins_dad

カメラで撮影した動画データを保存したbinaryファイル(.rawデータ)を開いて、LOF関数でファイルサイズを表示させる以下のVBAプログラムで容量が2Mのファイルは正しく表示できるのですが、200Mのファイルはファイルサイズ0(ゼロ)バイトとなり、表示できません。ファイルを開く前にFilelen関数で表示できないかを試しましたが、ダメでした。原因が分からず困っています。何かファイルサイズによる制約があるのでしょうか?(ちなみに変数の型をvariantに変更しても結果は変わりませんでした。)
どなたか原因が分かる方がみえれば、教えて下さい。お願い致します。
 
Public Sub RAWFileInput()
    Dim FilePath As String
    Dim fn
    Dim nByte As Long, iByte, kByte, lByte, CC As Integer, jByte, II As Long
    Dim ByteData() As Byte
    Dim X, Y, Z, Inten As Integer
     
    'ファイル名を取得
    FilePath = ThisWorkbook.Sheets("メイン").Cells(2, 1)
    nByte = FileLen(FilePath)
     
     'ファイル番号を取得
     fn = FreeFile
     'ファイルを開く
     Open FilePath For Binary Access Read As #fn
      
     'バイト数を取得
     nByte = LOF(fn)
     MsgBox (CStr(nByte) + "バイト")

回答
投稿日時: 21/06/09 18:02:46
投稿者: simple

念のための確認です。
(1)未使用の変数などがあるようですが、提示されたものは実際に動かしたものそのものでしょうか。
(2)そのファイルの大きさはどうやって確認されたのでしょうか?
  VBAで確認する必要性は?
(3)例えば、FSOのFileオブジェクトのSizeプロパティなどではどうなりますでしょうか。

投稿日時: 21/06/09 21:24:43
投稿者: twins_dad

コメントありがとうございます。
 
(1)未使用の変数などがあるようですが、提示されたものは実際に動かしたものそのものでしょうか。
→メッセージ欄に添付したプログラムは一部のみですが、デバッグしながらカーソルまで順番に確認した結果、msg boxには0Byteと表示されます。
 
(2)そのファイルの大きさはどうやって確認されたのでしょうか?
  VBAで確認する必要性は?
→単純にrawデータファイルのプロパティで確認しました。
VBAで確認する目的は、後続のプログラムで読み込んだByte数だけForループで後処理をするためです。
(3)例えば、FSOのFileオブジェクトのSizeプロパティなどではどうなりますでしょうか。
→やはり0でした。

回答
投稿日時: 21/06/10 07:22:28
投稿者: simple

不思議ですね。そうするとエクスプローラー上のサイズの表示とか、
Dir パス名 の結果なども 0 になっているんでしょうか。
もし、それは正しく表示されている、ということであれば、
https://www.moug.net/tech/exvba/0060087.html
などを参考にして、Dir パス名の結果をリダイレクトして、そこからサイズを読み取るとか、
ではいかがでしょうか。

回答
投稿日時: 21/06/10 09:07:09
投稿者: コーヒー飴

twins_dad さんの引用:
(1)未使用の変数などがあるようですが、提示されたものは実際に動かしたものそのものでしょうか。
→メッセージ欄に添付したプログラムは一部のみですが、デバッグしながらカーソルまで順番に確認した結果、msg boxには0Byteと表示されます。

 
こういうのは自分が正しいと思ってる部分が実際は間違いであるということが意外とあったりするものです。
(体験者談 苦笑)
 
今回の場合は、たとえば
On Error 〜
を端折って投稿したりとかです。

回答
投稿日時: 21/06/10 13:15:41
投稿者: simple

ああ、読み飛ばしていました。
一部なんですか。それは怪しい。ww
大量のデータで、なんらかの文字列操作的なものを行うとそこで想定外のことが起きる
という話は過去にもありますね。
事象が再現する実際に動作させたコード(最低限のものが望ましい)を提示されると、
回答が寄せられる可能性がありますね。

トピックに返信