さて、自分に必要な短焦点レンズはどれだろう
カメラを始めて結構立つが、今とのころずっとタムロンのズームレンズを使っている。
αEマウントの標準ズームレンズ tamron 28-75mm f2.8 を購入!作例
これは標準ズームレンズで、やや広角からやや望遠までズームできる。
ただ最近、「もし、自分が短焦点レンズをそろえるなら何がいいのか」と考え始めた。
短焦点レンズは画質がいい。
なのでもし、一人旅などで時間や荷物に余裕がある場合は短焦点レンズを複数本持っていったほうが満足する写真が撮れるだろう。
しかし、単焦点レンズはズームができない。
なので「自分に合った焦点距離のレンズ」をそろえる必要がある。
では「自分に合った焦点距離」はどうやって探すのか。
考えた結果「今まで撮った写真を調べれば、自分がよく使う焦点距離がわかるのでは」と考えた。
EXCELのマクロで焦点距離を一覧取得し、グラフ化する
画像の焦点距離は、右クリックしてプロパティを開くと確認できる。

しかし、今回は数百枚ある写真の焦点距離を調べる必要がある。
一つ一つ手で確認していては目が死ぬ。
ということで、EXCELのマクロを用いて焦点距離一覧取得ツールを作成した。
PCにEXCELが入ってる人なら使えると思うから配布しちゃう。
下記リンクからダウンロードできるのでどうぞぉ
使い方として
ダウンロードしたものを適当な解凍ソフトで展開する。
中のエクセルを開いてから一番端のシートを選択

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

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

するとフォルダの中のjpegのEXIF情報が読み込まれ、グラフになるぞ!
画面下にあるこの二つのタブがグラフだ。

まずは焦点距離別写真割合から見てみる。
名前通りどの焦点距離を一番使っているかがわかるグラフだ。
私の場合、28mmと75mmの使用率がとても高い。この二つで約60%を占めている。

ただ、「28mm」と「75mm」は私の持っている標準ズームレンズの広角端と望遠端である。
つまり「もっと広角に使いたいけどここまでしかない」とか「もっと望遠で撮りたいけどここまでしかない」っていう状況。
だから私の場合は、このデータ見て「28と75の単焦点買えばいいんだな!」とはならない。
次は「カメラレンズ別写真割合」っていうシートを見てみる。
レンズ別にどの程度の割合で使用しているかっていうのがわかる。
私の場合、タムロンの28-75が95%を占めていた。

マクロ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情報が取得できるのか?」というのは、下の表にまとめておいた。
256 | ImageWidth |
257 | ImageHeight |
271 | EquipMake |
272 | EquipModel |
274 | Orientation |
282 | XResolution |
283 | YResolution |
296 | ResolutionUnit |
305 | SoftwareUsed |
306 | DateTime |
531 | YCbCrPositioning |
33434 | ExifExposureTime |
33437 | ExifFNumber |
34850 | ExifExposureProg |
34855 | ExifISOSpeed |
36864 | ExifVer |
36867 | ExifDTOrig |
36868 | ExifDTDigitized |
37121 | ExifCompConfig |
37377 | ExifShutterSpeed |
37378 | ExifAperture |
37379 | ExifBrightness |
37380 | ExifExposureBias |
37381 | ExifMaxAperture |
37382 | ExifSubjectDist |
37383 | ExifMeteringMode |
37385 | ExifFlash |
37386 | ExifFocalLength |
37500 | ExifMakerNote |
37520 | ExifDTSubsec |
37521 | ExifDTOrigSS |
37522 | ExifDTDigSS |
40960 | ExifFPXVer |
40961 | ExifColorSpace |
40962 | ExifPixXDim |
40963 | ExifPixYDim |
41495 | ExifSensingMethod |
41729 | ExifSceneType |
20507 | ThumbnailData |
20512 | ThumbnailImageWidth |
20513 | ThumbnailImageHeight |
20515 | ThumbnailCompression |
20521 | ThumbnailOrientation |
20525 | ThumbnailResolutionX |
20526 | ThumbnailResolutionY |
20528 | ThumbnailResolutionUnit |
513 | JPEGInterFormat |
514 | JPEGInterLength |
20625 | ChrominanceTable |
20624 | LuminanceTable |
まとめ
このマクロは多分MACじゃ動かない。あとEXCELのバージョンが2016より前の人も動かないかも!
私の場合写真がまだ400枚前後しかないので問題ないが、1万とか2万とかあるひとは重くなるかもしれない。
まぁ個人が作ったものなので、悪しからず。
コメント
VBA初心者です。
他のEXIFデータもまとめて取得したいと思い、
Case Is = 33437
Cells(行, 10) = 取得値 ‘ExifFNumber
というのを
Case Is = 42036
Cells(行, 9) = 取得値 ‘使用レンズ
の次の行に追加したのですが、データ取得できません。
どうすればいいのか教えていただきたいです。