Excel VBAでカメラ画像をモデルや日付別に自動整理する方法

ExcelのVBAを利用して、カメラからの画像をモデルや日付別に整理する方法について詳しく解説します。具体的なコード例、その詳細解説、そしてさらに応用例も提供しています。特にカメラを使って頻繁に写真を撮る方や、写真整理が必要な企業の方に有効な手段を提供します。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

VBAを用いた画像整理の基本

ExcelのVBAは、非常に多機能であり、ファイルの整理にも役立ちます。特に、カメラからの大量の画像を効率よく整理する際には、VBAを活用することで作業の自動化が期待できます。

基本コードの解説

以下のコードは、指定したフォルダ内の画像をモデルや日付別に整理する基本的なものです。


Sub OrganizeImages()
    Dim FolderPath As String
    Dim FileName As String
    Dim Model As String
    Dim DateTaken As String
    ' 画像が保存されているフォルダを指定
    FolderPath = "C:\path_to_your_images\"
    FileName = Dir(FolderPath & "*.jpg")
    ' フォルダ内のすべての画像をループ
    Do While FileName <> ""
        ' 画像のEXIF情報からモデルと日付を取得
        Model = GetModel(FolderPath & FileName)
        DateTaken = GetDateTaken(FolderPath & FileName)
        ' 新しいフォルダに画像を移動
        MoveFile FolderPath & FileName, FolderPath & Model & "\" & DateTaken & "\" & FileName
        FileName = Dir
    Loop
End Sub

このコードは、指定したフォルダ内のJPG画像を対象とし、各画像のEXIF情報からカメラのモデルと撮影日を取得します。その後、モデル名のサブフォルダ、さらにその中に撮影日のサブフォルダを作成し、該当する画像をそのフォルダに移動します。

応用例1:特定のモデルの画像のみを整理

ある特定のカメラモデルで撮影された画像のみを整理したい場合には、以下のようにコードを修正します。


Sub OrganizeSpecificModel()
    Dim FolderPath As String
    Dim FileName As String
    Dim Model As String
    Dim DateTaken As String
    ' 画像が保存されているフォルダを指定
    FolderPath = "C:\path_to_your_images\"
    TargetModel = "Canon EOS R5"
    FileName = Dir(FolderPath & "*.jpg")
    Do While FileName <> ""
        Model = GetModel(FolderPath & FileName)
        DateTaken = GetDateTaken(FolderPath & FileName)
        If Model = TargetModel Then
            MoveFile FolderPath & FileName, FolderPath & Model & "\" & DateTaken & "\" & FileName
        End If
        FileName = Dir
    Loop
End Sub

このコードでは、指定した`TargetModel`の画像のみが対象となり、それ以外のモデルの画像は整理されません。

応用例2:日付別のフォルダに整理せずモデル別のみに整理

日付ではなくモデルのみで整理したい場合は、次のようにコードを修正します。


Sub OrganizeByModelOnly()
    Dim FolderPath As String
    Dim FileName As String
    Dim Model As String
    ' 画像が保存されているフォルダを指定
    FolderPath = "C:\path_to_your_images\"
    FileName = Dir(FolderPath & "*.jpg")
    Do While FileName <> ""
        Model = GetModel(FolderPath & FileName)
        MoveFile FolderPath & FileName, FolderPath & Model & "\" & FileName
        FileName = Dir
    Loop
End Sub

応用例3:特定の期間の画像のみを整理

特定の期間内で撮影された画像のみを整理する場合、以下のようにコードを修正します。


Sub OrganizeByDateRange()
    Dim FolderPath As String
    Dim FileName As String
    Dim Model As String
    Dim DateTaken As Date
    Dim StartDate As Date
    Dim EndDate As Date
    ' 画像が保存されているフォルダを指定
    FolderPath = "C:\path_to_your_images\"
    StartDate = DateValue("2023-01-01")
    EndDate = DateValue("2023-12-31")
    FileName = Dir(FolderPath & "*.jpg")
    Do While FileName <> ""
        Model = GetModel(FolderPath & FileName)
        DateTaken = GetDateTaken(FolderPath & FileName)
        If DateTaken >= StartDate And DateTaken <= EndDate Then
            MoveFile FolderPath & FileName, FolderPath & Model & "\" & DateValue(DateTaken) & "\" & FileName
        End If
        FileName = Dir
    Loop
End Sub

このコードでは、指定した期間(`StartDate`と`EndDate`)内で撮影された画像のみが整理対象となります。

まとめ

ExcelのVBAを利用することで、カメラからの画像を効率よくモデルや日付別に整理することができます。基本的なコードをベースに、さまざまな応用例

を試して、自分のニーズに合わせてカスタマイズしてみてください。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次