もくじ
VBAでフォルダ内ファイル名(ファイル一覧)を配列で取得する方法を紹介します。
拡張子を指定してファイル一覧を取得することも可能です。
VBAツール開発で時々使用するため、コピペで使用できるように関数にまとめました。
【実装コード】ファイル名(ファイル一覧)を取得する関数
-
Public Function get_files(ByVal folderPath As String, Optional ByVal extensions As Variant = Empty, Optional ByVal getPath As Boolean = True) As Variant
' FileSystemObjectを作成
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' 指定したディレクトリのフォルダを取得
Dim folder As Object
Set folder = fso.GetFolder(folderPath)
'ファイルが存在しない場合、処理を終了
If folder Is Nothing Then
get_files = False
Exit Function
End If
' 拡張子リスト作成
Dim extensionList() As Variant
If IsEmpty(extensions) Then
ReDim extensionList(0 To 0)
extensionList(0) = "*"
Else
If IsArray(extensions) Then
-
extensionList = extensions
ElseIf Not extensions = False Then
-
ReDim extensionList(0 To 0)
-
extensionList(0) = extensions
End If
End If
' ファイルのリスト取得
Dim ext As Variant
Dim file As Object
Dim filesList() As String
Dim i As Long
i = 0
For Each ext In extensionList
For Each file In folder.Files
-
If file.Name Like "*." & ext Then
-
ReDim Preserve filesList(i)
-
If getPath Then
-
' ファイルパスを取得
-
filesList(i) = file.Path
-
Else
-
' ファイル名を取得
-
filesList(i) = file.Name
-
End If
-
i = i + 1
End If
Next file
Next ext
' オブジェクトを解放
Set fso = Nothing
Set folder = Nothing
Set file = Nothing
'ファイルが1つも見つからない場合、Falseを返す
If i = 0 Then
get_files = False
Else
get_files = filesList
End If
End Function
get_files(folderPath, extensions, getPath)関数の使用方法
第一引数のfolderPath
にフォルダパスを指定することで、ファイル一覧を配列で取得できます。
第二引数のextensions
と第三引数のgetPath
は必要に応じて指定します。
対象のフォルダにファイルが存在しない場合、Falseを返します。
各引数について
folderPath (必須)
ファイルが格納されているフォルダパスを指定します。extensions (省略可)
取得したいファイルの拡張子を指定します。
複数の拡張子を指定する場合、配列で拡張子を指定します。
ひとつの拡張子を指定する場合、配列か文字列で拡張子を指定します。
引数を省略した場合、すべての拡張子が対象となります。getPath (省略可)
ファイル一覧をパスで取得するか、ファイル名のみで取得すかを指定することができます。
パスで取得する場合、True
を指定します。
ファイル名のみを取得する場合、False
を指定します。
引数を省略した場合、ファイル一覧をパスで取得します。
get_files()関数の使用例
デスクトップの「test」フォルダに格納してあるファイルの一覧を取得してみます。
「test」フォルダには以下のファイルが格納されています。
test.html
test.jpg
test.txt
test.xlsx
ファイル一覧のパスをメッセージボックスに表示
以下のコードを実行すると、ファイルパスを取得することができます。
get_files()関数の第一引数にフォルダパスのみ指定しています。
C:\Users\test\Desktop\test\test.html
C:\Users\test\Desktop\test\test.jpg
C:\Users\test\Desktop\test\test.txt
C:\Users\test\Desktop\test\test.xlsx
Sub sample()
'フォルダパス
Dim folderPath As String
folderPath = "C:\Users\test\Desktop\test"
'ファイル一覧を配列で取得
Dim fileList As Variant
fileList = get_files(folderPath)
'配列で取得したファイル一覧を文字列に変換
Dim str As String
Dim file As Variant
For Each file In fileList
str = str & file & Chr(13)
Next file
'ファイル一覧をメッセージボックスに表示
MsgBox str
End Sub
-
Public Function get_files(ByVal folderPath As String, Optional ByVal extensions As Variant = Empty, Optional ByVal getPath As Boolean = True) As Variant
' FileSystemObjectを作成
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' 指定したディレクトリのフォルダを取得
Dim folder As Object
Set folder = fso.GetFolder(folderPath)
'ファイルが存在しない場合、処理を終了
If folder Is Nothing Then
get_files = False
Exit Function
End If
' 拡張子リスト作成
Dim extensionList() As Variant
If IsEmpty(extensions) Then
ReDim extensionList(0 To 0)
extensionList(0) = "*"
Else
If IsArray(extensions) Then
-
extensionList = extensions
ElseIf Not extensions = False Then
-
ReDim extensionList(0 To 0)
-
extensionList(0) = extensions
End If
End If
' ファイルのリスト取得
Dim ext As Variant
Dim file As Object
Dim filesList() As String
Dim i As Long
i = 0
For Each ext In extensionList
For Each file In folder.Files
-
If file.Name Like "*." & ext Then
-
ReDim Preserve filesList(i)
-
If getPath Then
-
' ファイルパスを取得
-
filesList(i) = file.Path
-
Else
-
' ファイル名を取得
-
filesList(i) = file.Name
-
End If
-
i = i + 1
End If
Next file
Next ext
' オブジェクトを解放
Set fso = Nothing
Set folder = Nothing
Set file = Nothing
'ファイルが1つも見つからない場合、Falseを返す
If i = 0 Then
get_files = False
Else
get_files = filesList
End If
End Function
ファイル一覧のファイル名のみを取得してメッセージボックスに表示
以下のコードを実行すると、ファイル名を取得することができます。
get_files()関数の第一引数にフォルダパスを指定、第二引数指定なし、第三引数にFalse
を指定しています。
test.html
test.jpg
test.txt
test.xlsx
Sub sample()
'フォルダパス
Dim folderPath As String
folderPath = "C:\Users\test\Desktop\test"
'ファイル一覧を配列で取得
Dim fileList As Variant
fileList = get_files(folderPath, , False)
'配列で取得したファイル一覧を文字列に変換
Dim str As String
Dim file As Variant
For Each file In fileList
str = str & file & Chr(13)
Next file
'ファイル一覧をメッセージボックスに表示
MsgBox str
End Sub
-
Public Function get_files(ByVal folderPath As String, Optional ByVal extensions As Variant = Empty, Optional ByVal getPath As Boolean = True) As Variant
' FileSystemObjectを作成
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' 指定したディレクトリのフォルダを取得
Dim folder As Object
Set folder = fso.GetFolder(folderPath)
'ファイルが存在しない場合、処理を終了
If folder Is Nothing Then
get_files = False
Exit Function
End If
' 拡張子リスト作成
Dim extensionList() As Variant
If IsEmpty(extensions) Then
ReDim extensionList(0 To 0)
extensionList(0) = "*"
Else
If IsArray(extensions) Then
-
extensionList = extensions
ElseIf Not extensions = False Then
-
ReDim extensionList(0 To 0)
-
extensionList(0) = extensions
End If
End If
' ファイルのリスト取得
Dim ext As Variant
Dim file As Object
Dim filesList() As String
Dim i As Long
i = 0
For Each ext In extensionList
For Each file In folder.Files
-
If file.Name Like "*." & ext Then
-
ReDim Preserve filesList(i)
-
If getPath Then
-
' ファイルパスを取得
-
filesList(i) = file.Path
-
Else
-
' ファイル名を取得
-
filesList(i) = file.Name
-
End If
-
i = i + 1
End If
Next file
Next ext
' オブジェクトを解放
Set fso = Nothing
Set folder = Nothing
Set file = Nothing
'ファイルが1つも見つからない場合、Falseを返す
If i = 0 Then
get_files = False
Else
get_files = filesList
End If
End Function
複数の拡張子を指定してファイルパスをメッセージボックスに表示
以下のコードを実行すると、ファイル名を取得することができます。
get_files()関数の第一引数にフォルダパスを指定、第二引数に複数の拡張子(html、jpg)を配列で指定しています。
C:\Users\test\Desktop\test\test.html
C:\Users\test\Desktop\test\test.jpg
Sub sample()
'フォルダパス
Dim folderPath As String
folderPath = "C:\Users\test\Desktop\test"
'拡張子リスト
Dim extensionList As Variant
extensionList = Array("html", "jpg")
'ファイル一覧を配列で取得
Dim fileList As Variant
fileList = get_files(folderPath, extensionList)
'配列で取得したファイル一覧を文字列に変換
Dim str As String
Dim file As Variant
For Each file In fileList
str = str & file & Chr(13)
Next file
'ファイル一覧をメッセージボックスに表示
MsgBox str
End Sub
-
Public Function get_files(ByVal folderPath As String, Optional ByVal extensions As Variant = Empty, Optional ByVal getPath As Boolean = True) As Variant
' FileSystemObjectを作成
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' 指定したディレクトリのフォルダを取得
Dim folder As Object
Set folder = fso.GetFolder(folderPath)
'ファイルが存在しない場合、処理を終了
If folder Is Nothing Then
get_files = False
Exit Function
End If
' 拡張子リスト作成
Dim extensionList() As Variant
If IsEmpty(extensions) Then
ReDim extensionList(0 To 0)
extensionList(0) = "*"
Else
If IsArray(extensions) Then
-
extensionList = extensions
ElseIf Not extensions = False Then
-
ReDim extensionList(0 To 0)
-
extensionList(0) = extensions
End If
End If
' ファイルのリスト取得
Dim ext As Variant
Dim file As Object
Dim filesList() As String
Dim i As Long
i = 0
For Each ext In extensionList
For Each file In folder.Files
-
If file.Name Like "*." & ext Then
-
ReDim Preserve filesList(i)
-
If getPath Then
-
' ファイルパスを取得
-
filesList(i) = file.Path
-
Else
-
' ファイル名を取得
-
filesList(i) = file.Name
-
End If
-
i = i + 1
End If
Next file
Next ext
' オブジェクトを解放
Set fso = Nothing
Set folder = Nothing
Set file = Nothing
'ファイルが1つも見つからない場合、Falseを返す
If i = 0 Then
get_files = False
Else
get_files = filesList
End If
End Function
Excel VBAで初心者を卒業したいという方におすすめの1冊
もみじ
入門書レベルの内容を理解できる方におすすめの1冊で、実務で必要なスキルを学ぶことができます。
具体的には、コーディングの作法や効率的なコーディング方法、CSVやWeb上のデータとの連携方法、そしてマクロの高速化などの実務で役立つスキルを学ぶことができます。