プロが教える店舗&オフィスのセキュリティ対策術

エクセルのマクロを使って、デジカメで撮影した動画ファイルのファイル名を撮影日時に変更しようとしています。

FileDateTimeを使って、撮影日時を取得使用としているのですが、パナソニックのデジカメで撮影したQuickTimeのファイル(*.mov)は、デジカメからパソコンにデータを取り込んだ時間となってしまいます。

エクセルのマクロで、撮影日時を取得する方法はあるのでしょうか?

よろしくお願いします。

A 回答 (2件)

>エクセルのマクロで、撮影日時を取得する方法はあるのでしょうか?


 「ファイル、フォルダの最終更新日時」を現わす [ModifyDate プロパティ]
http://homepage2.nifty.com/pasocon/shell/folderi …
でもイケるかも知れませんが、動画編集などを行なった場合は不正になるかもしれませんので、取り敢えず、この辺りでググってみましょう。
http://www.google.co.jp/search?q=VBA+Exif+%E6%92 …


・・・ということで、ざっと以下のようなことで、いかがでしょうか?
 だたし、[ModifyDate プロパティ] の方は「秒」まで取れますが、
objFolder.GetDetailsOf(objFolder.ParseName(objMov), 12)
の方は、「秒」が表示されませんでした。

 また、私のパソコンには「mov」は皆無ですので「jpg」で試しましたから、「mov」で効くかどうかは不明です。


Sub Macro1()
  Dim objShell As Object
  Dim objFolder As Object
  Dim objRE As Object
  Dim objMov As Object
  Dim i As Integer
  Dim myDateTime As String

  Set objShell = CreateObject("Shell.Application")
  Set objFolder = objShell.BrowseForFolder(&H0, "フォルダを選択してください", &H211) ',"C:\")
  If objFolder Is Nothing Then GoTo 1
  Set objRE = CreateObject("VBScript.RegExp")

  For Each objMov In objFolder.Items
    If StrConv(Mid(objMov, InStrRev(objMov, ".") + 1), vbLowerCase) = "jpg" Then
      i = i + 1
      Cells(i, 1) = objMov.ModifyDate
      myDateTime = objFolder.GetDetailsOf(objFolder.ParseName(objMov), 12)
      With objRE
        .Global = True
        .Pattern = "[^0-9/: ]"
        Cells(i, 2) = .Replace(myDateTime, "")
      End With
    End If
  Next
  
  Set objRE = Nothing
  Set objFolder = Nothing
1:
  Set objShell = Nothing
End Sub


myDateTime = objFolder.GetDetailsOf(objFolder.ParseName(objMov), 12)
の最後の「12」につきましては、
http://oshiete.goo.ne.jp/qa/4736580.html#avatar_ …
に掲載された「GetDetailsOf で調べられる項目の列挙」を試して、「INDEX:=12 NAME:= 撮影日」みたいになるところの「INDEX」を入れてください。
 Vista・Windows7 は「12」で、それ以前は「25」のようですが、念のためご確認を。
#「For i = 0 To 1000」は「For i = 0 To 100」で十分です。

この回答への補足

ありがとうございました。
お礼が遅れて申し訳ございませんでした。
前述の通り、やってみましたが、ダメでした。

前述の方法と同様に、(2)ファイルをパソコンに移した日時の日時が取得されました。

あきらめずに、別の方法を探ってみます。

補足日時:2013/02/11 14:43
    • good
    • 0

撮影日時=最終更新日として、



Dim AAA, BBB, CCC, DDD
Dim AA

Set AAA = CreateObject("Scripting.FileSystemObject")
Set BBB = AAA.GetFolder("データ所在フォルダの名前")
Set CCC = BBB.files
For Each DDD In CCC
AA = DDD.DateLastModified '撮影日時
Next

この回答への補足

ありがとうございました。
お礼が遅れて申し訳ございませんでした。
やってみましたが、ダメでした。

ファイルの中には、(1)撮影した日時、(2)ファイルをパソコンに移した日時、(3)パソコン内部でファイルをコピーした日時、があり、結局、(2)ファイルをパソコンに移した日時の日時が取得されました。

どうも、MOVファイルの特殊事情のようです。

あきらめずに、別の方法を探ってみます。

補足日時:2013/02/11 14:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!