🚀
【VBA】複数のエクセルファイルを選択してファイルパスを返すコード
市町村から提出された同じ様式のエクセルファイルを集めてなんやかんや処理したいときに使うコードです。
リスト型でデータを受け取るのでそれに応じた処理をします。
Function SelectFiles() As Variant
Dim fileDialog As fileDialog
Dim filePath As Variant
Dim count As Integer
' 動的配列の初期化
ReDim filePath(1 To 1) As String
' FileDialogオブジェクトの初期化
Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)
With fileDialog
' 複数選択を許可する
.AllowMultiSelect = True
' ダイアログのタイトル設定
.Title = "複数のExcelファイルを選択してください"
' Excelファイルのみを表示
.Filters.Clear
.Filters.Add "Excel Files", "*.xls; *.xlsx; *.xlsm; *.xlsb"
' ファイル選択ダイアログの表示
If .Show = -1 Then
' 選択されたすべてのファイルパスを動的配列に格納
For count = 1 To .SelectedItems.count
ReDim Preserve filePath(1 To count) As String
filePath(count) = .SelectedItems(count)
Next count
Else
filePath(1) = ""
End If
End With
Set fileDialog = Nothing
' ファイルパスの配列を返す
SelectFiles = filePath
End Function
Redimは動的配列の宣言です。
Preserveは動的は配列の宣言時に古い要素をコピーして末尾に新しい要素を追加します。
filePathにファイル名が1個ずつ追加されるイメージです。
使い方
Sub Test()
Dim list As Variant
list = SelectFiles
Dim i As Long
For i = LBound(list) To UBound(list)
Debug.Print list(i)
Next i
End Sub
実行するとファイル選択のダイアログが出ます。
エクセルファイルを選択すると、イミディエイトウィンドウに選択したファイルのファイルパスが出力されます。
LBoundは配列の最初、UBoundは最後です。
C:\Users\robin\\デスクトップ\vba\ex1.xlsx
C:\Users\robin\\デスクトップ\vba\ex2.xlsx
C:\Users\robin\\デスクトップ\vba\ex3.xlsx
こんな感じで出力されるので、list = SelectFiles以降のコードを改変してお望みの処理をしてください。
Discussion