エクセルVBAを使ってファイル名やフォルダ名を取得する方法です。
ExcelVBAでファイル名一覧を取得し更新順に並べ替える方法
Excel VBAを使用して特定のディレクトリ内のファイル名を一覧化し、それをファイルの更新日時に基づいて順番に並べ替える方法です。 以下はフォルダ内のファイル名また...
目次
ファイル名を取得するフォルダ内と書き出し先
ファイル名を取得するフォルダ例です。
フォルダ内
F:¥sample
Fドライブ(ドライブ割り当てしている)の下の「sample」フォルダ内
書き出し先のエクセルシート
- エクセルブック:一覧.xlsm
- シート:A列の2行目~
全てのファイル名を一覧にする
フォルダ内にあるすべてのファイル名を書き出す例です。
Dir関数で取得
Dir関数を使った方法です。
サンプルコード (コピー可能)
Sub sample1() Dim i As Long Dim buf As String Const fPath As String = "F:¥sample¥" buf = Dir(fPath) i = 1 Do While buf <> "" i = i + 1 Cells(i, 1) = buf buf = Dir() Loop End Sub
実行結果
ファイル名を取得するフォルダ内に書き出し先のエクセルブックがある場合は、次の例でも同じ結果になります。
違う個所
buf = Dir(ThisWorkbook.Path & "¥")
以下は不要
Const fPath As String = "F:¥sample¥")
FileSystemObjectで取得
FileSystemObject(ファイルシステムオブジェクト)を使った方法です。
事前準備
事前バイディングによる方法のため、Microsoft Scripting Runtimeへの参照を有効にに設定します。
(1)[ ツール ] > [ 参照設定 ] を選択します。
(2)「Microsoft Scripting Runtime」にチェックを入れ、[ OK ] をクリックします。
コード
Sub sample_fso() Dim fso As Scripting.FileSystemObject Dim f As Scripting.File Dim i As Long Const fPath As String = "F:¥sample¥" Set fso = New Scripting.FileSystemObject i = 2 For Each f In fso.GetFolder(fPath).Files Cells(i, 1).Value = fso.GetFileName(f.Name) i = i + 1 Next f Set f = Nothing Set fso = Nothing End Sub
結果
~$ファイルも書き出します。
~$ファイルを書き出したくない場合は、一覧.xlsm一を読み取り専用にするか名前取得するフォルダに入れない方法が簡単です。
特定のファイル名のみ取得する
Dir関数を使い、「A」で始まるファイル名のみ書き出す例です。
サンプルコード(コピー可能)
Sub sample2() Dim i As Long Dim buf As String Const fPath As String = "F:¥sample¥" buf = Dir(fPath & "A" & "*") i = 1 Do While buf <> "" i = i + 1 Cells(i, 1) = buf buf = Dir() Loop End Sub
変更箇所
buf = Dir(fPath & “A” & “*”)