FileSystemObjectとは
FileSystemObjectは、「scrrun.dll」というライブラリを利用し、ファイルシステムへのアクセスを提供するためのオブジェクトです。
FileSystemObjectは関数でなくオブジェクトで、VBAで利用可能なライブラリです。
利用する方法としては、参照設定を行わずに利用する実行時バインディングと参照設定を行ってから利用する事前バインディングの2通りがあります。
バインディングについては、以下の記事で説明しています。
事前バインディングと実行時バインディングの違い VBAのバインディングとは、外部のオブジェクトの機能をVBAで利用できるようにすることです。 バインディングは2通りの方法があり、実行時に利用できるようにする実行時バインディング(遅延[…]
FileSystemObjectを利用し、選択したフォルダの中のファイル群を列挙する
実行時バインディングと事前バインディングの2つの方法で、FileSystemObjectを利用して選択したフォルダの中のファイルを列挙する方法を紹介します。
実行時バインディング方式で、FileSystemObject利用して選択したフォルダの中のファイルを列挙する
実行時バインディングという方式で、FileSystemoObjectを利用してフォルダの中のファイル群を列挙する方法です。
関数にしていますので、そのままコピーして利用することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Function ファイルを列挙する(strFolder As String, ByRef strGetFiles() As String) As Boolean Dim fso As Object Dim oFile As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim strFile As String ReDim strGetFiles(0) ' 強制的に初期化 If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If For Each oFile In fso.GetFolder(strFolder).Files If strGetFiles(0) <> "" Then ReDim Preserve strGetFiles(UBound(strGetFiles) + 1) End If strGetFiles(UBound(strGetFiles)) = oFile.Name ファイルを列挙する = True Next oFile Set fso = Nothing End Function |
事前バインディング方式で、FileSystemObjectを利用して選択したフォルダの中のファイルを列挙する
事前バインディングという方式で、FileSystemoObjectを利用してフォルダの中のファイル群を列挙する方法です。
参照設定で、「Microsoft Scripting Runtime」の設定が必要になります。
関数にしていますので、そのままコピーして利用することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Function ファイルを列挙する(strFolder As String, ByRef strGetFiles() As String) As Boolean Dim fso As FileSystemObject Dim oFile As Object Set fso = New FileSystemObject Dim strFile As String ReDim strGetFiles(0) ' 強制的に初期化 If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If For Each oFile In fso.GetFolder(strFolder).Files If strGetFiles(0) <> "" Then ReDim Preserve strGetFiles(UBound(strGetFiles) + 1) End If strGetFiles(UBound(strGetFiles)) = oFile.Name ファイルを列挙する = True Next oFile Set oFile = Nothing Set fso = Nothing End Function |
それぞれの関数の説明
strFolder:初期設定するフォルダを指定します。
strGetFiles():列挙したファイルを返します。
使用例
C2セルにフォルダが入っています。
C2セルのフォルダを初期設定として、「フォルダを選択する」関数に渡しています。
選択したフォルダの中のファイル群を列挙するため「ファイルを列挙する」関数に渡しています。
列挙したファイル群を、C3セル以降に代入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Sub フォルダを選択する_Click() Dim strFolder As String Dim strGetFiles() As String Dim bRet As Boolean strFolder = Range("c2") strFolder = フォルダを選択する(strFolder) Range("c2") = strFolder Dim i As Long ' ファイルを列挙する If strFolder <> "" Then bRet = ファイルを列挙する(strFolder, strGetFiles) ' 列挙したファイルをセルに書き込む If strGetFiles(0) <> "" Then For i = 0 To UBound(strGetFiles) If strGetFiles(i) <> "" Then Range("c" & 3 + i) = strGetFiles(i) End If Next i End If End If End Sub ' FileDialogを利用してフォルダを参照する Function フォルダを選択する(strFolder As String) If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = strFolder ' フォルダの初期値を設定 .Title = "フォルダを選択" If .Show = True Then フォルダを選択する = .SelectedItems(1) End If End With End Function |
応用1:FileSystemObjectを利用し、フォルダの中から対象とする拡張子のファイル群を列挙する
実行時バインディングという方式で、FileSystemoObjectを利用してフォルダの中から対象とする拡張子のファイル群を列挙する方法です。
関数にしていますので、そのままコピーして利用することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Function ファイルを列挙する(strFolder As String, ByRef strGetFiles() As String) As Boolean Dim fso As Object Dim oFile As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim strFile As String ReDim strGetFiles(0) ' 強制的に初期化 If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If For Each oFile In fso.GetFolder(strFolder).Files If fso.GetExtensionName(oFile.Name) = "xlsx" Then If strGetFiles(0) <> "" Then ReDim Preserve strGetFiles(UBound(strGetFiles) + 1) End If strGetFiles(UBound(strGetFiles)) = oFile.Name ファイルを列挙する = True End If Next oFile Set fso = Nothing End Function |
追加した部分
1 2 3 |
If fso.GetExtensionName(oFile.Name) = "xlsx" Then End If |
GetExtensionNameはファイルの拡張子を返しますので、拡張子がxlsxのファイルの列挙ができます。
事前バインディングも、実行時バインディングと同様に追加するのみでOKです。
応用2:FileSystemObjectを利用し、フォルダの中から対象とするファイル群を列挙する
実行時バインディングという方式で、FileSystemoObjectを利用してフォルダの中から対象とするファイル群を列挙する方法です。
関数にしていますので、そのままコピーして利用することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Function ファイルを列挙する(strFolder As String, ByRef strGetFiles() As String) As Boolean Dim fso As Object Dim oFile As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim strFile As String ReDim strGetFiles(0) ' 強制的に初期化 If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If For Each oFile In fso.GetFolder(strFolder).Files If oFile.Name Like "ファイル*" And fso.GetExtensionName(oFile.Name) = "xlsx" Then If strGetFiles(0) <> "" Then ReDim Preserve strGetFiles(UBound(strGetFiles) + 1) End If strGetFiles(UBound(strGetFiles)) = oFile.Name ファイルを列挙する = True End If Next oFile Set fso = Nothing End Function |
変更した部分
1 |
If oFile.Name Like "ファイル*" And fso.GetExtensionName(oFile.Name) = "xlsx" Then |
対象とするファイルを列挙する場合は、シンプルな方法としてLikeを利用すると簡単に列挙ができます。対象ファイルが複雑な場合は、正規表現を利用して対象ファイルを列挙する方法があります。
事前バインディングも、実行時バインディングと同様に変更するのみでOKです。