F0000019_ファイルダイアログを開き、複数のExcelファイルを選択させる

ファイルダイアログを開き、複数のExcelファイルを選択させる 関数リファレンス

この関数について

支店や営業所に対し指定のフォーマットのExcelを配布し入力・提出してもらう場合や、各月や各四半期ごとのファイルの比較などをする場合、複数のExcelファイルを結合したり、集計したりといった処理が必要になるかと思います。ファイルダイアログは、複数ファイルを選択することも可能です。ここで紹介する関数は、ファイルダイアログを表示しマクロの実行者が選択した複数のExcelファイルの絶対パスを取得することができます。

使い方 ①引数

■引数1:title
 ファイルダイアログに表示するタイトルを指定できます。下記画像を参照

■引数2:initial_folder_path
 ファイルダイアログが表示されたときにデフォルトで開くフォルダを指定できます。

■引数3:var_type_code
 ファイルパスが格納された配列(返値)の型を指定できます。「vbString」「vbVariant」のいずれか。それ以外を指定してもVariant型で返します。指定しない場合のデフォルトはString型です。

■引数4:based_index
 ファイルパスが格納された配列(返値)の最小のインデックス(添え字)を指定できます。指定しない場合のデフォルトは1です。

使い方 ②戻り値

マクロ実行者がファイルを選択した場合、ファイルの絶対パスを配列に格納して返します。選択しなかった場合、未定義の配列を返します。そのため、返値の配列が初期化されているか調べる(F0000010)ことで選択したかどうかを判定できます。

使い方 ③呼び出し方例(サンプルコード)

Public Sub Test_OpenFileDialogExcelMulti()

Dim file_path_str() As String
Dim i As Long

file_path_str = OpenFileDialogExcelMulti("Excelファイルをすべて選択してください。", ThisWorkbook.Path)
If IsInitArray(file_path_str) Then
If MsgBox("選択したファイルを開きますか?", vbInformation + vbYesNo) = vbYes Then
For i = LBound(file_path_str, 1) To UBound(file_path_str, 1) Step 1
Call Workbooks.Open(file_path_str(i))
Next i
End If
End If

End Sub

'■配列が初期化されているか調べる(F0000010)
Public Function IsInitArray(ByRef arr As Variant) As Boolean
On Error GoTo UnDefined

IsInitArray = IsNumeric(UBound(arr, 1))
Exit Function

UnDefined:

IsInitArray = False

End Function

【結果】複数のExcelファイルの絶対パスを取得できました

サンプルコードを実行すると選択したExcelファイルをすべて開くことができます。選択されたファイルの個数はあらかじめわからないため、ForNext文で「Lbound」と「Ubound」とを指定して繰り返し処理をしています。また、ファイルが選択されたかどうかも判定しているため、選択しなかった場合は、何もせず終了します。

この関数は関数リファレンスからコピペ可能です!

この記事のタイトルを検索窓へ貼り付けて関数を検索してみましょう。 表示されたコードをクリックするだけでコピー完了! あとは自身で作成したモジュールに貼り付けるだけでこの関数を利用できます。サンプルコードもあり! 関数リファレンストップへ

Comment