[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Excel-VBAで、画像ファイルから撮影年月日を抽出したい』(マリオ)
まず、写真ファイルを d:\Test1\test.jpg に置きます。
この写真ファイルの更新年月日ではなく、
Exif情報の撮影年月日(平成■年■月■日)を抽出したいです。
下記のプロシージャを実行すると、
MsgBoxに、
『?2018/?05/?28??11:52』
と表示される。はてなマーク(?)が5つ表示される。
これを『平成30年5月28日』と表示させたい
どのようなコードにすればよいでしょうか?
ご教授願います。
(パソコンの環境は、Windows10,Excel2013 です。)
Dim ObjShell As Object Dim ObjFolder As Object Dim FolderName As Variant
FolderName = "d:\Test1" Set ObjShell = CreateObject("Shell.Application") Set ObjFolder = ObjShell.Namespace(FolderName) myText = ObjFolder.GetDetailsOf(ObjFolder.ParseName("test.jpg"), 12) MsgBox myText End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
mytext = ObjFolder.GetDetailsOf(ObjFolder.ParseName("test.jpg"), 12) mytext = Mid(mytext, 2, 5) & Mid(mytext, 8, 3) & Mid(mytext, 12, 3) & Mid(mytext, 17) MsgBox Format(mytext, "gggee年m月d日")
(hatena) 2018/06/12(火) 23:04
Sub 撮影情報()
Dim sPath Dim sFile Dim objFile As Object Dim dTaken Dim sModel Dim msg As String
sPath = "d:\Test1" sFile = "test.jpg" msg = sPath & "\" & sFile
With CreateObject("Shell.Application") On Error Resume Next Set objFile = .Namespace(sPath).ParseName(sFile) On Error GoTo 0 If Not objFile Is Nothing Then 'それぞれの情報があるとして dTaken = objFile.ExtendedProperty("System.Photo.DateTaken") sModel = objFile.ExtendedProperty("System.Photo.CameraModel") msg = msg & " は" & vbCrLf & sModel & " で" & vbCrLf & _ Format(dTaken, "gggee年m月d日") & " に撮影されました" Else msg = msg & " は見つかりませんでした" End If End With MsgBox msg End Sub
(kazuo) 2018/06/14(木) 12:14
hatenaさん ありがとうございます。確かに、下記のコードでいけました。
撮影年月日の取得は、windows10だと、『12』番目で取得できますが、
OSの環境によって変更しなきゃいけなんでしょうか?
mytext = ObjFolder.GetDetailsOf(ObjFolder.ParseName("test.jpg"), 12)
mytext = Mid(mytext, 2, 5) & Mid(mytext, 8, 3) & Mid(mytext, 12, 3)
MsgBox Format(mytext, "ggge年m月d日")
(マリオ) 2018/06/14(木) 20:15
kazuoさん
ありがとうございます。
System.Photo.DateTaken
で調べると、
windows7,8,8.1,10で対応しているのでしょうかね?
https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb760410(v=vs.85).aspx
window7以上のバージョンなら、
System.Photo.DateTaken
で撮影年月日を取得するというコード
書けませんでしょうか?
(マリオ) 2018/06/14(木) 20:26
(マリオ) 2018/06/14(木) 20:56
https://msdn.microsoft.com/en-us/library/bb776504(v=vs.85).aspx
(kazuo) 2018/06/14(木) 22:18
vista以降ですか〜
いろいろ試してみました。
Set objFile = CreateObject("Shell.Application").Namespace(sPath).ParseName(sFile)
ですが、
『sPath』と『sFile』がString型だとエラーができますね。
それぞれが、String型の場合は、『CVar(sPath)』と『CVar(sFile)』で、
Variant型に変更する必要があるようです。
(マリオ) 2018/06/17(日) 13:02
F6Exifというフリーソフトでは、そういうのを一括でCSVファイルに出力してくれますので、
それをエクセルで開いて好きに加工するのもありと思います。
出来るだけ、他力本願して自分でコード書かなくてもいいようにしたい。。。^^;
(まっつわん) 2018/06/17(日) 14:12
最初からVariant型指定でupさせていただいています。
> myText = ObjFolder.GetDetailsOf(ObjFolder.ParseName("test.jpg"), 12)
の"test.jpg"もVariant型です。
(kazuo) 2018/06/17(日) 19:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.