写真のEXIF情報を読み込んで焦点距離を一覧にするEXCELマクロを作ってみた

2020年9月22日カメラカメラ,カメラ周辺機器,プログラミング

さて、自分に必要な短焦点レンズはどれだろう

カメラを始めて結構立つが、今とのころずっとタムロンのズームレンズを使っている。

αEマウントの標準ズームレンズ tamron 28-75mm f2.8 を購入!作例

これは標準ズームレンズで、やや広角からやや望遠までズームできる。

ただ最近、「もし、自分が短焦点レンズをそろえるなら何がいいのか」と考え始めた。

短焦点レンズは画質がいい。

なのでもし、一人旅などで時間や荷物に余裕がある場合は短焦点レンズを複数本持っていったほうが満足する写真が撮れるだろう。

しかし、単焦点レンズはズームができない。

なので「自分に合った焦点距離のレンズ」をそろえる必要がある。

では「自分に合った焦点距離」はどうやって探すのか。

考えた結果「今まで撮った写真を調べれば、自分がよく使う焦点距離がわかるのでは」と考えた。

EXCELのマクロで焦点距離を一覧取得し、グラフ化する

画像の焦点距離は、右クリックしてプロパティを開くと確認できる。

しかし、今回は数百枚ある写真の焦点距離を調べる必要がある。

一つ一つ手で確認していては目が死ぬ。

ということで、EXCELのマクロを用いて焦点距離一覧取得ツールを作成した。

PCにEXCELが入ってる人なら使えると思うから配布しちゃう。

下記リンクからダウンロードできるのでどうぞぉ

使い方として

ダウンロードしたものを適当な解凍ソフトで展開する。

中のエクセルを開いてから一番端のシートを選択

EXIF 取得マクロ

右上の「データ取得」ボタンを押す

EXIF 取得マクロ

するとこんなダイアログが出てくるので、写真が入っているフォルダを選択してokを押す。

EXIF 取得マクロ

するとフォルダの中のjpegのEXIF情報が読み込まれ、グラフになるぞ!

画面下にあるこの二つのタブがグラフだ。

EXIF 取得マクロ

まずは焦点距離別写真割合から見てみる。

名前通りどの焦点距離を一番使っているかがわかるグラフだ。

私の場合、28mmと75mmの使用率がとても高い。この二つで約60%を占めている。

EXIF 取得マクロ

ただ、「28mm」と「75mm」は私の持っている標準ズームレンズの広角端と望遠端である。

つまり「もっと広角に使いたいけどここまでしかない」とか「もっと望遠で撮りたいけどここまでしかない」っていう状況。

だから私の場合は、このデータ見て「28と75の単焦点買えばいいんだな!」とはならない。

次は「カメラレンズ別写真割合」っていうシートを見てみる。

レンズ別にどの程度の割合で使用しているかっていうのがわかる。

私の場合、タムロンの28-75が95%を占めていた。

EXIF 取得マクロ

シートをカスタマイズして他の情報も引き出してみる

このグラフ類は「ピボットグラフ」という機能を使っている。

この機能を弄れば使えばほかにもいろいろな集計ができる。

やり方は動画の後半に載ってるので参考にしてくだせぇ

マクロVBAでEXIF情報を取得する際のコードとID一覧

マクロのプログラムはこんな感じ。

Sub GetExif()
    '変数定義
    Dim WIAオブジェクト As New WIA.ImageFile
    Dim WIAプロパティ As WIA.Property
    Dim i As Long
    Dim ID As Variant
    Dim プロパティ名 As Variant
    Dim 取得値 As Variant
    Dim カウンタ As Integer
    Dim フォルダパス As String
    Dim ファイル名 As String
    Dim ファイルパス() As String
    
    '写真のあるフォルダ取得
    Sheets("データ一覧").Select
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
            フォルダパス = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    
    'ファイル名を再取得
    カウンタ = 1
    If Not (Range("A1").ListObject.DataBodyRange Is Nothing) Then Range("A1").ListObject.DataBodyRange.Delete
    ファイル名 = Dir(フォルダパス & "\" & "*.jpg")
    Do While ファイル名 <> ""
        カウンタ = カウンタ + 1
        Cells(カウンタ, 1) = フォルダパス & "\" & ファイル名
        ファイル名 = Dir()
    Loop
    
    '各ファイルからEXIFデータ抜き取り
    For 行 = 2 To カウンタ
        WIAオブジェクト.LoadFile Cells(行, 1)
        On Error Resume Next
        For Each WIAプロパティ In WIAオブジェクト.Properties
            i = i + 1
            ID = WIAプロパティ.PropertyID
            プロパティ名 = WIAプロパティ.Name
            取得値 = WIAプロパティ.Value
            
            Select Case WIAプロパティ.PropertyID
                Case Is = 271
                    Cells(行, 2) = 取得値    'カメラメーカー
                Case Is = 272
                    Cells(行, 3) = 取得値  'カメラ名
                Case Is = 306
                    Cells(行, 4) = 取得値   '撮影日時
                Case Is = 34855
                    Cells(行, 5) = 取得値  'ISO
                Case Is = 33437
                    Cells(行, 6) = 取得値  'F値
                Case Is = 37386
                    Cells(行, 7) = 取得値  '焦点距離
                Case Is = 33434
                    Cells(行, 8) = 取得値  'シャッター速度
                Case Is = 42036
                    Cells(行, 9) = 取得値  '使用レンズ
            End Select
        Next
    Next
    'ピボットテーブルとグラフ更新
    ActiveWorkbook.RefreshAll
    Sheets("焦点距離別写真割合").Select
    On Error GoTo 0
    MsgBox ("集計完了")
End Sub

ポイントは後半ののほうの「select case 」以降の部分。

case is = ***

という記載があるが、これは「写真のEXIF情報のうち、プロパティID〇〇〇番のデータを取得しますよ」という意味※厳密にはちょっと違うけどそんな感じ。

つまりその番号を違うものに変更すれば、EXIF情報の中の別のデータを取得することができる。

では「ID番号を何番に変更すればどんなEXIF情報が取得できるのか?」というのは、下の表にまとめておいた。

256ImageWidth
257ImageHeight
271EquipMake
272EquipModel
274Orientation
282XResolution
283YResolution
296ResolutionUnit
305SoftwareUsed
306DateTime
531YCbCrPositioning
33434ExifExposureTime
33437ExifFNumber
34850ExifExposureProg
34855ExifISOSpeed
36864ExifVer
36867ExifDTOrig
36868ExifDTDigitized
37121ExifCompConfig
37377ExifShutterSpeed
37378ExifAperture
37379ExifBrightness
37380ExifExposureBias
37381ExifMaxAperture
37382ExifSubjectDist
37383ExifMeteringMode
37385ExifFlash
37386ExifFocalLength
37500ExifMakerNote
37520ExifDTSubsec
37521ExifDTOrigSS
37522ExifDTDigSS
40960ExifFPXVer
40961ExifColorSpace
40962ExifPixXDim
40963ExifPixYDim
41495ExifSensingMethod
41729ExifSceneType
20507ThumbnailData
20512ThumbnailImageWidth
20513ThumbnailImageHeight
20515ThumbnailCompression
20521ThumbnailOrientation
20525ThumbnailResolutionX
20526ThumbnailResolutionY
20528ThumbnailResolutionUnit
513JPEGInterFormat
514JPEGInterLength
20625ChrominanceTable
20624LuminanceTable

まとめ

このマクロは多分MACじゃ動かない。あとEXCELのバージョンが2016より前の人も動かないかも!

私の場合写真がまだ400枚前後しかないので問題ないが、1万とか2万とかあるひとは重くなるかもしれない。

まぁ個人が作ったものなので、悪しからず。

Posted by mottiy