【Excel・VBA】フォルダ内のファイル名を取得しシートに書き出す

エクセル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” & “*”)

目次