[[20180612215443]] 『Excel-VBAで、画像ファイルから撮影年月日を抽出ax(マリオ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Excel-VBAで、画像ファイルから撮影年月日を抽出したい』(マリオ)

まず、写真ファイルを d:\Test1\test.jpg に置きます。

この写真ファイルの更新年月日ではなく、
Exif情報の撮影年月日(平成■年■月■日)を抽出したいです。

下記のプロシージャを実行すると、
MsgBoxに、
『?2018/?05/?28??11:52』
と表示される。はてなマーク(?)が5つ表示される。

これを『平成30年5月28日』と表示させたい
どのようなコードにすればよいでしょうか?
ご教授願います。

(パソコンの環境は、Windows10,Excel2013 です。)


Sub 撮影日時表示()

   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


biさん、マナさん、半平太さん、まっつわんさん、γさん、seiyaさん、ねむねむさん
ご健在のようでなによりです(^^)
βさんは、いらっしゃらないのですかね?

(マリオ) 2018/06/14(木) 20:56


vista以降のはずです。
WhenTakenと使い分けする必要を感じません。

https://msdn.microsoft.com/en-us/library/bb776504(v=vs.85).aspx
(kazuo) 2018/06/14(木) 22:18


kazuoさん
ありがとうございます。

vista以降ですか〜

いろいろ試してみました。

Set objFile = CreateObject("Shell.Application").Namespace(sPath).ParseName(sFile)
ですが、
『sPath』と『sFile』がString型だとエラーができますね。
それぞれが、String型の場合は、『CVar(sPath)』と『CVar(sFile)』で、
Variant型に変更する必要があるようです。

(マリオ) 2018/06/17(日) 13:02


>Exif情報の撮影年月日(平成■年■月■日)を抽出したいです
こういうのはそれ用のフリーソフトを使ってみては?と思います。

F6Exifというフリーソフトでは、そういうのを一括でCSVファイルに出力してくれますので、
それをエクセルで開いて好きに加工するのもありと思います。
出来るだけ、他力本願して自分でコード書かなくてもいいようにしたい。。。^^;

(まっつわん) 2018/06/17(日) 14:12


> Dim sPath
> Dim sFile

最初から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.