ファイルの全てのプロパティを取得する関数

以下を参考に作成しています。

https://excel-ubara.com/excelvba4/EXCEL_VBA_426.html

getExtendedProperty 関数

この関数は、指定されたファイルの拡張プロパティを取得し、配列に格納します。

Private Function getExtendedProperty(ByVal aFilePath As String) As Variant()
    Dim rtnAry() As Variant
    ReDim rtnAry(1 To 500, 1 To 2)
  
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
  
    Dim sh As Object
    Set sh = CreateObject("Shell.Application")
    Dim shFolder As Object
    Dim shFile As Object
    Set shFolder = sh.Namespace(fso.GetParentFolderName(aFilePath))

    Dim i As Long
    Set shFile = shFolder.ParseName(fso.GetFileName(aFilePath))
    
    For i = 1 To 500
        rtnAry(i, 1) = shFolder.GetDetailsOf(Nothing, i)
        rtnAry(i, 2) = shFolder.GetDetailsOf(shFile, i)
    Next
    
    getExtendedProperty = rtnAry
End Function
  1. 配列の初期化:
    • Dim rtnAry() As VariantReDim rtnAry(1 To 500, 1 To 2) で、500×2のサイズの配列を宣言します。
  2. FileSystemObjectの作成:
    • Set fso = CreateObject("Scripting.FileSystemObject") で、FileSystemObjectを作成し、ファイルシステム操作を行えるようにします。
  3. Shell.Applicationの作成:
    • Set sh = CreateObject("Shell.Application") で、Shell.Applicationオブジェクトを作成し、ファイルの詳細情報を取得するために使用します。
  4. ファイル情報の取得:
    • Set shFolder = sh.Namespace(fso.GetParentFolderName(aFilePath)) で、ファイルの親フォルダを取得します。
    • Set shFile = shFolder.ParseName(fso.GetFileName(aFilePath)) で、フォルダ内の特定のファイルを取得します。
  5. プロパティの取得:
    • For i = 1 To 500 ループで、500までのプロパティを取得します。
    • rtnAry(i, 1) = shFolder.GetDetailsOf(Nothing, i) は、プロパティの名前を取得します。
    • rtnAry(i, 2) = shFolder.GetDetailsOf(shFile, i) は、ファイルのプロパティの値を取得します。

使用例 Sub

このサブルーチンは、ユーザーにファイルを選択させ、そのファイルの拡張プロパティをシートに表示します。

Sub 使用例()
    
    ' ファイル選択ダイヤログボックス
    Dim myTitle As String
    myTitle = "入力ファイル"
    Dim fileName As String
    With Application.FileDialog(msoFileDialogFilePicker)
        .Filters.Clear
        .InitialFileName = ThisWorkbook.Path & "\"
        .AllowMultiSelect = False
        .Title = myTitle
        If .Show = True Then
            fileName = .SelectedItems(1)
        End If
    End With
        
    ' 全てのプロパティを取得
    Dim s
    s = getExtendedProperty(fileName)
    
    Dim rng As Range
    ' アクティブシートのセルA1
    Set rng = ActiveSheet.Range("A1")
    
    ' 「二次元配列」を「シート」に入れる
    Call array_to_sheet(s, rng)
End Sub
  1. ファイル選択ダイアログボックスの表示:
    • With Application.FileDialog(msoFileDialogFilePicker) でファイル選択ダイアログを表示し、ユーザーにファイルを選択させます。
    • 選択されたファイルのパスは fileName に格納されます。
  2. 拡張プロパティの取得:
    • s = getExtendedProperty(fileName) で、選択されたファイルのプロパティを取得します。
  3. セル範囲の設定:
    • Set rng = ActiveSheet.Range("A1") で、データを表示するセル範囲の開始位置を設定します。
  4. プロパティの表示:
    • Call array_to_sheet(s, rng) で、取得したプロパティをシートに表示します。

array_to_sheet Sub

このサブルーチンは、二次元配列の内容を指定したシートのセル範囲に書き込みます。

'*******
'* 「二次元配列」を「シート」に入れるプロシージャ。20230707
'* SheetName:シート名前
'* myArray:二次元配列。参照渡し。配列は、モジュールレベル変数としている。
'* FirstRange:配列を入れる先頭のRange
Private Sub array_to_sheet(ByRef myArray As Variant, ByVal FirstRange As Range)
    FirstRange.Resize(UBound(myArray), UBound(myArray, 2)) = myArray
End Sub
  1. 配列の内容をセル範囲に書き込み:
    • FirstRange.Resize(UBound(myArray), UBound(myArray, 2)) = myArray で、配列のサイズにセル範囲をリサイズし、配列の内容をセルに書き込みます。
    • このサブルーチンの説明は、以下を参照してください。

全体の流れ

  1. 使用例 サブルーチンが呼び出され、ユーザーにファイルを選択させます。
  2. getExtendedProperty 関数で選択されたファイルの拡張プロパティを取得し、配列に格納します。
  3. array_to_sheet サブルーチンで、取得したプロパティをアクティブシートのセル範囲に書き込みます。

このマクロは、指定されたファイルの詳細なプロパティ情報を簡単に取得し、Excelシートに表示するための便利なツールとなります。

実行結果

音源ファイル wav の結果

以下の通り、27行目に、音源の時間が入ります。

画像ファイル jpg の結果

以下の通り、12行目に、撮影日時が入ります。

その他、すべてのプロパティが取得できますので、ご利用ください。

Follow me!