[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ExcelのVBAを使って、フォルダ内にある複数のJPEGファイルの撮影日時秒等を取得したい。』(mamu)
ExcelのVBAを使って、フォルダ内にある複数のJPEGファイルの撮影日時秒を取得したいと思っています。はじめは、ExifReader.clsという外部クラスをインポートして使用し、撮影日時秒を取得できたのですが、多量のJPEGファイルを読み込んだ時に、32件目のファイルでなぜが、ExifReader.clsのオーバーフローでストップしてしまったため、ExifReader.clsには頼らず、Open、Get、byte配列などを使って、ファイルを開き、撮影日時秒を取得することとしました。以下のコードで、1件目のJPEG画像の撮影日時秒が取得できましたが、2件目以降の撮影日時秒が取得できないで困っています。2件目以降も、1件目と同じ撮影日時秒が出力されてしまいます。
Open、Get、byte配列、Closeなどの使い方で、何か間違っているのでしょうか?
ご教授いただけるとたすかります。よろしくお願いいたします。
Private Sub 取り込みボタン_Click()
Dim buf As String, cnt As Long, path As String, ws As Worksheet Dim i As Integer Dim byteJPEG() As Byte Dim tmpOffset(0 To 3) As Variant Dim offset As Long Dim tmpExifDate As String Dim n As Integer
path = Range("B5").Value 'Excelのセルからパスの取得 例)c:\ buf = Dir(path & "*.JPG") 'JPGファイル名の取得
Set ws = Sheets("?AJPEG一覧")
cnt = 2 '1行目には列のタイトルが入っているので、2〜スタートしました。
Do While buf <> ""
n = FreeFile
Open path & buf For Binary As #n ReDim byteJPEG(LOF(n)) As Byte Get #n, , byteJPEG Close #n
'撮影日時秒の取得 For i = 0 To 3 Step 1 tmpOffset(i) = byteJPEG(444 + i) '444は、撮影日時の位置 Next
offset = CLng(tmpOffset(0)) + CLng(tmpOffset(1)) * 256 + CLng(tmpOffset(2)) * 256 * 256 + CLng(tmpOffset(2)) * 256 * 256 * 256 + 12
For i = 0 To 19 Step 1 tmpExifDate = tmpExifDate & Chr("&H" & Hex(byteJPEG(offset + i))) '←撮影日時秒 Next
With ws '取得した情報をセルに書き出し .Range("A" & cnt).Value = buf .Range("B" & cnt).Value = tmpExifDate End With
cnt = cnt + 1 buf = Dir() 'JPGファイル名の再取得
Erase byteJPEG()
Loop
ws.Activate
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows8 >
tmpExifDate = ""
で初期化することで、機能しました。
お騒がせしました。
(mamu) 2015/05/05(火) 12:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.