FileDialogオブジェクトを利用し、一つのファイルを選択するファイル選択ダイアログを作成する
FileDialogを利用して初期設定にフォルダを指定し、一つのファイルを選択するためのファイル選択ダイアログを作成します。
関数にしていますので、そのままコピーして利用することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Function 一つのファイルを選択する(strFolder As String) As String If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If With Application.FileDialog(msoFileDialogOpen) .InitialFileName = strFolder ' フォルダの初期値を設定 .AllowMultiSelect = False ' 複数ファイルを選択しないようにする .Title = "ファイルを選択" If .Show = True Then 一つのファイルを選択する = .SelectedItems(1) End If End With End Function |
関数の説明
strFolder:初期設定するフォルダを指定します。
使用例
C2セルにフォルダが入っています。
C2セルのフォルダを初期設定として、「一つのファイルを選択する」関数に渡しています。
ファイルを選択した場合、C3セルに選択したファイルを代入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub 一つのファイルを選択する_Click() Dim strFolder As String Dim strGetFile As String strFolder = Range("c2") strGetFile = 一つのファイルを選択する(strFolder) If strGetFile <> "" Then Range("c3") = strGetFile End If End Sub |
FileDialogオブジェクトを利用し、複数のファイルを選択するファイル選択ダイアログを作成する
FileDialogを利用して初期設定にフォルダを指定し、複数のファイルを選択するためのファイル選択ダイアログを作成します。
関数にしていますので、そのままコピーして利用することができます。
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 |
' FileDialogを利用してフォルダを参照する Function 複数のファイルを選択する(strFolder As String, ByRef strFiles() As String) As Boolean Dim varFile As Variant ReDim strFiles(0) ' 強制的に初期化 If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If With Application.FileDialog(msoFileDialogOpen) .InitialFileName = strFolder ' フォルダの初期値を設定 .AllowMultiSelect = True ' 複数ファイルを選択できるようにする .Title = "ファイルを選択" If .Show = True Then If .SelectedItems.Count <> 0 Then For Each varFile In .SelectedItems 複数のファイルを選択する = True If strFiles(0) <> "" Then ReDim Preserve strFiles(UBound(strFiles) + 1) End If strFiles(UBound(strFiles)) = varFile Next End If End If End With End Function |
関数の説明
strFolder:初期設定するフォルダを指定します。
使用例
C2セルにフォルダが入っています。
C2セルのフォルダを初期設定として、「一つのファイルを選択する」関数に渡しています。
ファイルを選択した場合、C3から以下のセルに選択したファイルを代入します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub 複数のファイルを選択する_Click() Dim strFolder As String Dim strGetFiles() As String Dim bRet As Boolean strFolder = Range("c2") bRet = 複数のファイルを選択する(strFolder, strGetFiles) Dim i As Long 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 Sub |
応用:FileDialogオブジェクトを利用し、拡張子を限定した複数のファイルを選択するファイル選択ダイアログを作成する
FileDialogを利用して初期設定にフォルダを指定し、複数のファイルを選択するためのファイル選択ダイアログを作成します。ここは、さらに拡張子を限定したバージョンにしています。
ここでは、Excelファイルに限定した場合のソースコードです。
関数にしていますので、そのままコピーして利用することができます。
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 |
Function 複数のファイルを選択する(strFolder As String, ByRef strFiles() As String) As Boolean Dim varFile As Variant ReDim strFiles(0) ' 強制的に初期化 If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\" End If With Application.FileDialog(msoFileDialogOpen) .Filters.Clear .Filters.Add "Excel ブック", "*.xlsx" .Filters.Add "Excel マクロ有効ブック", "*.xlsm" .Filters.Add "すべてのファイル", "*.*" .FilterIndex = 1 .InitialFileName = strFolder ' フォルダの初期値を設定 .AllowMultiSelect = True ' 複数ファイルを選択できるようにする .Title = "ファイルを選択" If .Show = True Then If .SelectedItems.Count <> 0 Then For Each varFile In .SelectedItems 複数のファイルを選択する = True If strFiles(0) <> "" Then ReDim Preserve strFiles(UBound(strFiles) + 1) End If strFiles(UBound(strFiles)) = varFile Next End If End If End With End Function |
追加した部分
1 2 3 4 5 |
.Filters.Clear .Filters.Add "Excel ブック", "*.xlsx" .Filters.Add "Excel マクロ有効ブック", "*.xlsm" .Filters.Add "すべてのファイル", "*.*" .FilterIndex = 1 |
.Filters.Clearという部分は、デフォルトでファイル選択対象としている拡張子をクリアするために必要です。
その後、1番目はxlsx、2番目はxlsm、3番目はすべてのファイルとしてフィルタ一覧を作成しています。
.FilterIndex = 1は、デフォルトで1番目のxlsxを指定しています。
設定したときは、以下のようになります。
.Filters.Clearを設定しなかった場合、以下のようになってしまいます。
さらにcsvファイルを追加したい場合は、xlsmの下の行に追加すればOKです。
1 2 3 4 5 6 |
.Filters.Clear .Filters.Add "Excel ブック", "*.xlsx" .Filters.Add "Excel マクロ有効ブック", "*.xlsm" .Filters.Add "CSV (コンマ区切り)", "*.csv" ' ここを追加 .Filters.Add "すべてのファイル", "*.*" .FilterIndex = 1 |