「VBAでダイアログボックスを表示して、特定のファイルを選択・保存したりしたいな。。。」
このように思ったことはありませんか?
- ダイアログボックスで「ファイル」や「フォルダ」を自分で選択したい。
この記事では、エクセルVBAを使って「FileDialog (ファイルダイアログ)」を利用する方法を詳しくご紹介します。
「FileDialog」を使用することで、ユーザーが簡単に「フォルダ」や「ファイル」を選択できるようになり、手作業でのファイル指定が不要になります。
これにより、選択ミスが減り、作業効率が大幅に向上します。
基本的な使い方から応用的なテクニックまで、初心者でもすぐに実践できる内容です。
ぜひ最後までお読みください。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
この記事を見てできるようになること
この記事を読めば、以下のことができるようになります。
VBAの「FileDialog」ってなに?
VBAの「FileDialog (ファイルダイアログ)」は、次のような画面 (ダイアログボックス)から「ファイルを選択」「ファイルを保存」することができます。
「FileDialog」を活用することで、作業の正確性と効率が向上し、手作業によるミスを最小限に抑えることができます。
それでは、「FileDialog」の構成について説明を行っていきます。
VBAのコード量が多くて大変そうに思えるかもしれませんが、心配いりません。
必要な部分をコピペして使いまわすだけで十分活用できます。
VBAの「FileDialog」の構成を解説
引数の「fileDialogType」について解説
「fileDialogType」には4つの種類があり、それぞれ異なる目的で使用されます。
これらを理解し使い分けることで、状況に応じた適切な動作を簡単に実装できます。
※各タイプの具体的な動作については、次のセクションで詳しく解説します。
FileDialogの「引数」と「メソッド」について解説
VBAのFileDialogには、様々な「プロパティ」と「メソッド」があります。
ここでは、主要なものを紹介します。
プロパティについて
プロパティ | 説明 |
---|---|
InitialFileName | ダイアログを開いたときに表示される初期のフォルダパスを指定します。 |
AllowMultiSelect | ファイルを複数選択できるようにするかどうか?を指定します。 ・Trueの場合、複数のファイルを選択。 ・Falseの場合、1つのファイルのみ選択。 |
Title | ダイアログのタイトルを指定します。 |
Filters | ダイアログに表示されるファイルのフィルターを設定します。 |
SelectedItems | ユーザーが選択したファイルやフォルダのパスを取得します。 |
メソッドについて
メソッド | 説明 |
---|---|
Show | ダイアログを表示し、ユーザーが選択を完了するまで待機します。 |
Execute | 選択したファイルを開きます(msoFileDialogOpenの場合)。 |
より詳しい情報は、Microsoft公式 – FileDialog プロパティを参照してみてください。
引数「fileDialogType」の違いによる動作について
FileDialogの引数「fileDialogType」によって、ダイアログボックスの動作がどのように変わるかを説明します。
実際にコードをコピペして、試してみてください!
「msoFileDialogOpen」の場合の動作 ( ファイルを開く )
「ファイルを開く」ためのダイアログボックスについて解説します。
コード詳細
Sub msoFileDialogOpen_test()
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = "C:\サンプル"
.AllowMultiSelect = False
.Title = "msoFileDialogOpenの動作テスト"
If .Show = True Then
.Execute
MsgBox "選択したファイルを開きました。" & vbLf & .SelectedItems(1)
End If
End With
End Sub
解説
このコードを実行すると、次の動作を行います。
- ダイアログが出てきて、ファイルが選択できるようになる。
- ファイルを選択する。
- 選択したファイルが開く。
- 「選択したファイルを開きました」とメッセージボックスが出てくる。
詳細の設定は、次のように行っています。
- With Application.FileDialog(msoFileDialogOpen)
- 今回は「msoFileDialogOpen」を使用しています。
※ファイルを開くためのダイアログボックスです。
- 今回は「msoFileDialogOpen」を使用しています。
- .InitialFileName = “C:\サンプル”
- ダイアログを開いたときに表示される初期フォルダのパスを指定します。
- .AllowMultiSelect = False
- ファイルを複数選択できるようにする場合は「True」とします。
- .Title = “msoFileDialogOpenの動作テスト”
- ダイアログのタイトルを指定します。
- If .Show = True Then
- ファイルを選択したかどうかを判断します。
キャンセルした場合、何も実行しません。
- ファイルを選択したかどうかを判断します。
- .Execute
- 選択したファイルを開きます。
- MsgBox “選択したファイルを開きました。” & vbLf & .SelectedItems(1)
- メッセージボックスで、メッセージと開いたファイルパスを表示させます。
「msoFileDialogSaveAs」の場合の動作 ( ファイルを保存 )
「ファイルを保存」するためのダイアログボックスについて解説します。
コード詳細
Sub msoFileDialogSaveAs_test()
Dim savePath As String
With Application.FileDialog(msoFileDialogSaveAs)
.InitialFileName = "C:\サンプル"
.AllowMultiSelect = False
.Title = "msoFileDialogSaveAsの動作テスト"
If .Show = True Then
savePath = .SelectedItems(1)
'// 保存操作を実行
ActiveWorkbook.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbookMacroEnabled
MsgBox "ファイルを保存しました。" & vbLf & savePath
End If
End With
End Sub
解説
このコードを実行すると、次の動作を行います。
- ダイアログが出てきて、ファイルの保存箇所が選択できるようになる。
- フォルダを選択する。
※実行の際「ファイルの種類(T):」は、初期で「.xlsx」となっています。
「.xlsm」に変更しないと、ファイル保存の際にエラーが出るので注意が必要です。 - ファイルが保存される。
- 「ファイルを保存しました」と、メッセージボックスが出てくる。
詳細の設定は、次のように行っています。
- Dim savePath As String
- 「savePath」という変数を宣言します。
- With Application.FileDialog(msoFileDialogSaveAs)
- 今回は「msoFileDialogSaveAs」を使用しています。
※ファイルを保存するためのダイアログボックスです。
- 今回は「msoFileDialogSaveAs」を使用しています。
- .InitialFileName = “C:\サンプル”
- ダイアログを開いたときに表示される初期フォルダのパスを指定します。
今回は保存を行いたいパスとなります。
- ダイアログを開いたときに表示される初期フォルダのパスを指定します。
- .AllowMultiSelect = False
- ファイルを複数選択できるようにする場合は「True」とします。
- .Title = “msoFileDialogSaveAsの動作テスト”
- ダイアログのタイトルを指定します。
- If .Show = True Then
- ファイルを選択したかどうかを判断します。
キャンセルした場合、何も実行しません。
- ファイルを選択したかどうかを判断します。
- savePath = .SelectedItems(1)
- 変数に取得したファイルパスを取得します。
- ActiveWorkbook.SaveAsFilename:=savePath,FileFormat:=xlOpenXMLWorkbookMacroEnabled
- ファイルを保存します。
今回は、拡張子を「.xlsm」で保存できるように設定しています。
- ファイルを保存します。
- MsgBox “選択したファイルを開きました。” & vbLf & .SelectedItems(1)
- メッセージボックスで、メッセージと保存したファイルパスを表示させます。
「msoFileDialogFilePicker」の場合の動作 ( ファイル選択 )
「ファイルを選択」するためのダイアログボックスについて解説します。
コード詳細
Sub msoFileDialogFilePicker_test()
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "C:\サンプル"
.AllowMultiSelect = False
.Title = "msoFileDialogFilePickerの動作テスト"
If .Show = True Then
MsgBox "ファイルが選択されました。" & vbLf & .SelectedItems(1)
End If
End With
End Sub
解説
このコードを実行すると、次の動作を行います。
- ダイアログが出てきて、ファイルが選択できるようになる。
- ファイルを選択する。
- 「選択したファイルを開きました」と、メッセージボックスが出てくる。
詳細の設定は、次のように行っています。
- With Application.FileDialog(msoFileDialogFilePicker)
- 今回は「msoFileDialogFilePicker」を使用しています。
※ファイルを選択するためのダイアログボックスです。
- 今回は「msoFileDialogFilePicker」を使用しています。
- .InitialFileName = “C:\サンプル”
- ダイアログを開いたときに表示される初期フォルダのパスを指定します。
- .AllowMultiSelect = False
- ファイルを複数選択できるようにする場合は「True」とします。
- .Title = “msoFileDialogFilePickerの動作テスト”
- ダイアログのタイトルを指定します。
- If .Show = True Then
- ファイルを選択したかどうかを判断します。
キャンセルした場合、何も実行しません。
- ファイルを選択したかどうかを判断します。
- MsgBox “ファイルが選択されました。” & vbLf & .SelectedItems(1)
- メッセージボックスで、メッセージと選択し取得したファイルパスを表示させます。
「msoFileDialogFolderPicker」の場合の動作 ( フォルダ選択 )
「フォルダを選択」するためのダイアログボックスについて解説します。
コード詳細
Sub msoFileDialogFolderPicker_test()
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:"
.AllowMultiSelect = False
.Title = "msoFileDialogFolderPickerの動作テスト"
If .Show = True Then
MsgBox "フォルダが選択されました。" & vbLf & .SelectedItems(1)
End If
End With
End Sub
解説
このコードを実行すると、次の動作を行います。
- ダイアログが出てきて、フォルダーが選択できるようになる。
- フォルダーを選択する。
- 「選択したフォルダーを開きました」と、メッセージボックスが出てくる。
詳細の設定は、次のように行っています。
- With Application.FileDialog(msoFileDialogFolderPicker)
- 今回は「msoFileDialogFolderPicker」を使用しています。
※フォルダーを選択するためのダイアログボックスです。
- 今回は「msoFileDialogFolderPicker」を使用しています。
- .InitialFileName = “C:”
- ダイアログを開いたときに表示される初期フォルダのパスを指定します。
- .AllowMultiSelect = False
- ファイルを複数選択できるようにする場合は「True」とします。
- .Title = “msoFileDialogFolderPickerの動作テスト”
- ダイアログのタイトルを指定します。
- If .Show = True Then
- ファイルを選択したかどうかを判断します。
キャンセルした場合、何も実行しません。
- ファイルを選択したかどうかを判断します。
- MsgBox “フォルダが選択されました。” & vbLf & .SelectedItems(1)
- メッセージボックスで、メッセージと選択し取得したフォルダーパスを表示させます。
VBAの「FileDialog」は、どのようなときに使用するか?
「FileDialog (ファイルダイアログ)」は、次のようなシーンで非常に役立ちます。
VBAの「FileDialog」を使用するうえでの、注意ポイント
- ファイルの選択とフォルダーの選択は同時に行えない
- FileDialogでは、ファイルの選択とフォルダーの選択を同時に行うことができません。
同時に両方を取得したい場合は、FileDialogのコードを個別に記載して、別々に取得する必要があります。
- FileDialogでは、ファイルの選択とフォルダーの選択を同時に行うことができません。
- ユーザーの選択キャンセルへの対応
- FileDialogでユーザーがファイルやフォルダを選択せずにキャンセルボタンを押した場合、エラーが発生することがあります。
そのため、If .Show = True Then を使って、選択が行われたかどうかを必ずチェックし、選択がキャンセルされた場合の処理(何もしない、またはメッセージを表示するなど)を適切に行うことが重要です。
- FileDialogでユーザーがファイルやフォルダを選択せずにキャンセルボタンを押した場合、エラーが発生することがあります。
- AllowMultiSelectの設定に注意
- AllowMultiSelectプロパティをTrueに設定すると、複数のファイルやフォルダを選択できるようになりますが、複数選択時の処理が複雑になる場合があります。
選択された複数の項目をどのように処理するかをあらかじめ設計しておくことが必要です。
- AllowMultiSelectプロパティをTrueに設定すると、複数のファイルやフォルダを選択できるようになりますが、複数選択時の処理が複雑になる場合があります。
- フィルター設定の順番に注意
- FileDialogのFiltersプロパティを使ってファイルのフィルタリングを行う場合、設定する順番が重要です。
最初のフィルターがデフォルトで選択されるため、優先度の高いフィルターを最初に設定するようにしましょう。
- FileDialogのFiltersプロパティを使ってファイルのフィルタリングを行う場合、設定する順番が重要です。
VBAの「FileDialog」の使用例をご紹介
それでは、FileDialogの使用例を紹介します。
使用例1: 複数のファイル名を取得し、メッセージボックスで表示する
ダイアログボックスで複数のファイルを選択し、そのファイルをメッセージボックスで表示させる方法を紹介します。
主な使用用途 :
選択した複数の画像ファイルをリサイズしたり、複数のExcelファイルを開いて内容を処理したりする場合に便利です。
Sub 複数のファイルを選択する()
Dim selectedFiles As String
Dim i As Long
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "C:\サンプル"
.AllowMultiSelect = True
.Title = "使用例1: 複数のファイルをダイアログで選択する"
If .Show = True Then
selectedFiles = "ファイルが選択されました。" & vbLf
For i = 1 To .SelectedItems.Count
selectedFiles = selectedFiles & .SelectedItems(i) & vbLf
Next i
MsgBox selectedFiles
End If
End With
End Sub
- STEP1ダイアログボックスを開く
Application.FileDialog(msoFileDialogFilePicker)を使用して、ユーザーにファイル選択のためのダイアログボックスを表示します。
- STEP2ファイルの複数選択を許可
.AllowMultiSelect = True によって、複数のファイルを一度に選択できるように設定します。
- STEP3選択されたファイルを処理
ユーザーが選択したすべてのファイルをループで処理し、そのファイル名をselectedFilesに取得します。
- STEP4結果を表示
選択されたファイルのリストをメッセージボックスで表示します。
処理結果
このコードで使用している機能
1行ずつ解説
- With Application.FileDialog(msoFileDialogFilePicker)
- 今回は「msoFileDialogFilePicker」を使用しています。
※ファイルを選択するためのダイアログボックスです。
- 今回は「msoFileDialogFilePicker」を使用しています。
- InitialFileName = “C:\サンプル”
- ダイアログを開いたときに表示される初期フォルダのパスを指定します。
- .AllowMultiSelect = True
- 複数のファイルを選択できるようにするため「True」に設定します。
- .Title = “使用例1: 複数のファイルをダイアログで選択する”
- ダイアログのタイトルを指定します。
- If .Show = True Then
- ファイルを選択したか?判断を行います。
キャンセルした場合、何も実行しません。
- ファイルを選択したか?判断を行います。
- For i = 1 To .SelectedItems.Count
selectedFiles = selectedFiles & .SelectedItems(i) & vbLf
Next i- 複数ファイルを選択した場合、「.SelectedItems.Count」でカウントし、
そのファイル数をFor文でループしてファイル名を「selectedFiles」に取得します。
- 複数ファイルを選択した場合、「.SelectedItems.Count」でカウントし、
- MsgBox selectedFiles
- メッセージボックスで、メッセージと選択し取得したフォルダーパスを表示させます。
このコードを使用すると、複数のファイルを一括処理する必要がある場合に非常に便利です。
各ファイルに対する後続の処理をこの基盤の上で追加することで、様々な用途に応用可能です。
使用例2: フィルターを使用し、特定のファイルだけ選択する
エクセルファイルだけを選択できるように「フィルター」を設定して、ファイルを選択する方法を紹介します。
主な使用用途 :
Excelファイルだけを選択できるようにし、誤ったファイル形式が選ばれることを防ぎます。
これは、データ入力やファイル操作の正確性を高める際に特に有効です。
Sub ファイルフィルターを追加して選択する()
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "C:\サンプル"
.AllowMultiSelect = False
.Title = "使用例2: ファイルフィルターを追加して選択する"
.Filters.Clear
.Filters.Add "Excel Files", "*.xlsx; *.xlsm", 1
.Filters.Add "All Files", "*.*", 2
If .Show = True Then
MsgBox "ファイルが選択されました。" & vbLf & .SelectedItems(1)
End If
End With
End Sub
- STEP1ダイアログボックスを開く
Application.FileDialog(msoFileDialogFilePicker)を使用して、ユーザーにファイル選択のためのダイアログボックスを表示します。
- STEP2初期フォルダとタイトルを設定
.InitialFileName = “C:\サンプル” でダイアログを開いた際に表示される初期フォルダのパスを指定し、.Title でダイアログのタイトルを設定します。
- STEP3ファイルフィルターを追加
.Filters.Clear で既存のフィルターをクリアし、.Filters.Add を使って「Excelファイル」や「すべてのファイル」を表示するフィルターを追加します。
- STEP4ファイルの選択
ユーザーがファイルを選択した場合、そのファイルのパスをメッセージボックスで表示します。
処理結果
このコードで使用している機能
1行ずつ解説
- With Application.FileDialog(msoFileDialogFilePicker)
- 今回は「msoFileDialogFilePicker」を使用しています。
※ファイルを選択するためのダイアログボックスです。
- 今回は「msoFileDialogFilePicker」を使用しています。
- InitialFileName = “C:\サンプル”
- ダイアログを開いたときに表示される初期フォルダのパスを指定します。
- .AllowMultiSelect = False
- ファイルを1つしか選択できないように「False」を設定します。
- .Title = “使用例2: ファイルフィルターを追加して選択する”
- ダイアログのタイトルを指定します。
- .Filters.Clear
- 既存のフィルターをクリアします。
- .Filters.Add “Excel Files”, “*.xlsx; *.xlsm”, 1
.Filters.Add “All Files”, “.“, 2- エクセルファイルのみを表示するフィルター 及び、すべてのファイルを表示するフィルターを追加します。
インデックス番号「1や2」は、フィルターが表示される順番になります。
- エクセルファイルのみを表示するフィルター 及び、すべてのファイルを表示するフィルターを追加します。
- If .Show = True Then
MsgBox “ファイルが選択されました。” & vbLf & .SelectedItems(1)
End Ifow = True Then- ファイルを選択したかどうかを判断し、選択した場合はそのファイルのパスをメッセージボックスに表示します。
このコードは、特定の種類のファイルのみを選択させたい場合に非常に有用です。
フィルターを適用することで、ユーザーが誤ったファイルを選択することを防ぎ、操作の正確性を確保します。
また、選択されたファイルのパスを簡単に取得し、後続の処理に活用できるため、VBAを使ったファイル操作を効率化することができます。
使用例3: ファイル選択をキャンセルしてもエラーが発生しない処理
ユーザーが「キャンセル」をクリックした場合でもエラーが発生せず、処理を安全に終了する方法を紹介します。
この方法では、ファイルダイアログを関数内で処理し、キャンセル時には空の文字列を返すことでエラーを防ぎます。
主な使用用途 :
このコードは、VBAでファイルを選択するダイアログを使用する際、ユーザーがファイルを選択しなかった場合(キャンセルした場合)でもエラーが発生しないようにしたい場合に使用します。ファイルが選択された場合のみ、後続の処理を実行できます。
Sub MainProcess()
Dim filePath As String
'// ファイルダイアログを使用してファイルを選択
filePath = SelectFileDialog()
'// キャンセルされた場合、処理を終了
If filePath = "" Then
MsgBox "キャンセルされました。処理を終了します。"
Exit Sub
End If
'// ファイルが選択された場合の処理
MsgBox "選択されたファイル: " & filePath
'// ここにファイルを開く処理などを追加
End Sub
Function SelectFileDialog() As String
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "ファイルを選択してください"
.InitialFileName = "C:\サンプル"
.AllowMultiSelect = False
'// ユーザーがファイルを選択したかどうかを確認
If .Show = True Then
'// 選択されたファイルパスを返す
SelectFileDialog = .SelectedItems(1)
Else
'// キャンセルされた場合は空の文字列を返す
SelectFileDialog = ""
End If
End With
End Function
- STEP1ファイル選択の処理
MainProcess サブルーチンを実行し、関数「SelectFileDialog」を呼び出してファイル選択ダイアログを表示します。
ユーザーがファイルを選択した場合、そのパスを変数「filePath」に格納します。 - STEP2キャンセルチェック
If filePath = “” Then の条件で、ファイル選択がキャンセルされたかどうかを確認します。
キャンセルされた場合、メッセージを表示してサブルーチンを終了します。 - STEP3ファイルの処理
ファイルが選択された場合のみ、選択されたファイルのパスをメッセージボックスに表示します。
処理結果
このコードで使用している機能
1行ずつ解説
- Sub MainProcess()
- ここでは新しいサブルーチン(プロシージャ)を定義しています。
Subは「サブプロシージャ」を意味し、MainProcessはこのプロシージャの名前です。
このプロシージャが呼び出されると、指定された一連の処理が実行されます。
- ここでは新しいサブルーチン(プロシージャ)を定義しています。
- Dim filePath As String
- 変数「filePath」を宣言しています。
String型の変数で、ファイルのパス(ファイルの場所)を格納するために使用します。
- 変数「filePath」を宣言しています。
- filePath = SelectFileDialog()
- ここでは、「SelectFileDialog」という関数を呼び出し、その戻り値(選択されたファイルのパス)を変数「filePath」に格納します。
「SelectFileDialog()」は、後ほど定義される関数で、ファイルダイアログを表示し、選択されたファイルのパスを返します。
- ここでは、「SelectFileDialog」という関数を呼び出し、その戻り値(選択されたファイルのパス)を変数「filePath」に格納します。
- If filePath = “” Then
- If文を使って、変数「filePath」が空の文字列であるかどうかをチェックします。
ここでは、ユーザーがファイル選択ダイアログで「キャンセル」をクリックした場合(filePathが空文字列となる場合)に備えた処理を行っています。
- If文を使って、変数「filePath」が空の文字列であるかどうかをチェックします。
- MsgBox “キャンセルされました。処理を終了します。”
- MsgBox関数を使ってメッセージボックスを表示します。
ここでは「キャンセルされました。処理を終了します。」というメッセージが表示されます。
- MsgBox関数を使ってメッセージボックスを表示します。
- Exit Sub
- Exit Sub命令でサブルーチンを途中で終了します。ここでは、ユーザーがファイル選択をキャンセルした場合、これ以上の処理を行わずに終了するために使用します。
- MsgBox “選択されたファイル: ” & filePath
- この行では、選択されたファイルのパスを表示します。
MsgBoxで表示するメッセージにfilePathの内容を連結(&)して、「選択されたファイル: [ファイルパス]」というメッセージを表示します。
これにより、ユーザーはどのファイルを選んだか確認できます。
- この行では、選択されたファイルのパスを表示します。
- End Sub
- これはサブルーチンの終了を示しています。
MainProcessプロシージャの処理がここで終了します。
- これはサブルーチンの終了を示しています。
- Function SelectFileDialog() As String
- ここで新しい関数「SelectFileDialog」を定義しています。
この関数はファイルダイアログを表示し、ユーザーが選択したファイルのパスを文字列(String 型)として返す機能を持っています。
この関数は、ファイルが選択されなかった場合には空の文字列を返します。
- ここで新しい関数「SelectFileDialog」を定義しています。
- With Application.FileDialog(msoFileDialogFilePicker)
- Withステートメントは、指定したオブジェクトに対して複数のプロパティやメソッドを続けて実行するために使用されます。
ここでは、Application.FileDialog(msoFileDialogFilePicker)オブジェクト(ファイル選択ダイアログボックス)に対して操作を行います。
- Withステートメントは、指定したオブジェクトに対して複数のプロパティやメソッドを続けて実行するために使用されます。
- .Title = “ファイルを選択してください”
- ファイル選択ダイアログのタイトルを「ファイルを選択してください」に設定しています。
このタイトルはダイアログボックスのウィンドウ上部に表示されます。
- ファイル選択ダイアログのタイトルを「ファイルを選択してください」に設定しています。
- .InitialFileName = “C:\サンプル”
- ダイアログが開いたときに最初に表示される初期フォルダのパスを指定しています。
ここでは、「C:\サンプル」というフォルダが最初に表示されるように設定されています。
- ダイアログが開いたときに最初に表示される初期フォルダのパスを指定しています。
- .AllowMultiSelect = False
- ユーザーが複数のファイルを選択できるかどうかを設定しています。
Falseに設定することで、ユーザーは1つのファイルしか選択できません。
- ユーザーが複数のファイルを選択できるかどうかを設定しています。
- If .Show = True Then
- ファイルダイアログを表示し、ユーザーがファイルを選択したかどうかを確認します。
Showメソッドはダイアログを表示し、「OK」がクリックされた場合は「True」を返し、「キャンセル」がクリックされた場合は「False」を返します。
- ファイルダイアログを表示し、ユーザーがファイルを選択したかどうかを確認します。
- SelectFileDialog = .SelectedItems(1)
- ユーザーが選択したファイルのパスを、関数「SelectFileDialog」の戻り値として設定します。
.SelectedItems(1)で、ユーザーが選択した最初のファイルのパスを取得します。
- ユーザーが選択したファイルのパスを、関数「SelectFileDialog」の戻り値として設定します。
- Else
‘// キャンセルされた場合は空の文字列を返す
SelectFileDialog = “”- If文の「それ以外」のケースを指定しています。
ここでは、ユーザーがファイル選択をキャンセルした場合の処理を定義しています。 - ユーザーがファイル選択をキャンセルした場合、空の文字列””を関数の戻り値として設定します。
これにより、MainProcessサブルーチンでキャンセルを検知できるようになります。
- If文の「それ以外」のケースを指定しています。
- End If
- If文の終了を示します。
これ以降の処理は、ファイルが選択されたかどうかに関わらず実行されます。
- If文の終了を示します。
- End With
- Withステートメントの終了を示します。
ここで、FileDialogオブジェクトに対する操作が終了します。
- Withステートメントの終了を示します。
- End Function
- 関数の終了を示します。
これで関数「SelectFileDialog」の処理が完了し、呼び出し元に戻ります。
関数はSelectFileDialogに格納された値を返します。
- 関数の終了を示します。
このコードは、ユーザーがファイルダイアログで「キャンセル」を選択した場合でも、エラーを出さずにスムーズに処理を終了させる方法を提供します。
特に、ファイルを開く前にユーザーの選択を確認し、キャンセル時に適切なメッセージを表示することで、ユーザーフレンドリーなインターフェースを実現します。
この構成を使用することで、ファイル選択ダイアログをより安全かつ効果的に扱うことができ、エラー処理やユーザー体験の向上が期待できます。
使用例4: フォルダを選択し、保管されているファイルをセルに転記する方法
ダイアログボックスでフォルダを選択し、Dir関数を使用しそのフォルダ内にあるファイルのリストをExcelのセルに転記する方法を紹介します。
主な使用用途 :
選択したフォルダ内のファイルをリストとして表示したり、特定の処理を実行する際に便利です。例えば、指定フォルダ内のすべてのファイルを一括で処理する場合に有効です。
Sub FolderToCell()
Dim folderPath As String
Dim fileName As String
Dim i As Integer
'// フォルダ選択ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\サンプル"
.Title = "フォルダを選択してください"
If .Show = True Then
folderPath = .SelectedItems(1) & "\"
Else
MsgBox "フォルダが選択されませんでした。"
Exit Sub
End If
End With
'// 選択したフォルダ内のファイルを取得してセルに転記
i = 1
fileName = Dir(folderPath & "*.*") '// フォルダ内の最初のファイルを取得
Do While fileName <> ""
Cells(i, 1).Value = fileName '// A列にファイル名を転記
i = i + 1
fileName = Dir '// 次のファイルを取得
Loop
End Sub
- STEP1ダイアログボックスを開く
Application.FileDialog(msoFileDialogFolderPicker) を使用して、フォルダを選択するためのダイアログボックスを表示します。
- STEP2フォルダのパスを取得
ユーザーが選択したフォルダのパスを変数「folderPath」に格納します。
- STEP3Dir関数でファイルリストを取得
Dir 関数を使用して、フォルダ内の最初のファイルを取得し、それをセルに転記します。
- ラベル次のファイルを取得してループ
Do While ループを使い、フォルダ内の全てのファイルを順に取得し、Excelのセルに転記します。
処理結果
このコードで使用している機能
1行ずつ解説
- Sub FolderToCell()
- ここでは、新しいサブルーチン FolderToCell を定義しています。
Excelのセルにフォルダ内のファイルをリスト表示する処理を行います。
- ここでは、新しいサブルーチン FolderToCell を定義しています。
- Dim folderPath As String
- 「folderPath」は選択されたフォルダのパスを格納する文字列型の変数です。
- Dim fileName As String
- 「fileName」はフォルダ内のファイル名を格納するための文字列型の変数です。
- Dim i As Long
- 「i」は、セルの行番号を管理するための整数型の変数です。
- With Application.FileDialog(msoFileDialogFolderPicker)
- Application.FileDialog(msoFileDialogFolderPicker) を使って、フォルダを選択するためのダイアログを表示します。
With ステートメントを使うことで、同じオブジェクトに対する複数の操作を簡潔に記述できます。
- Application.FileDialog(msoFileDialogFolderPicker) を使って、フォルダを選択するためのダイアログを表示します。
- .InitialFileName = “C:\サンプル”
- ダイアログを開いたときの初期フォルダのパスを指定します。
ここでは「C:\サンプル」が初期フォルダとして表示されます。
- ダイアログを開いたときの初期フォルダのパスを指定します。
- .Title = “フォルダを選択してください”
- ダイアログボックスのタイトル(ウィンドウ上部に表示されるテキスト)を「フォルダを選択してください」に設定します。
- If .Show = True Then
- ダイアログを表示し、ユーザーが「OK」をクリックしたかどうかを確認します。
「True」ならばフォルダが選択され、「キャンセル」を押された場合は「False」となります。
- ダイアログを表示し、ユーザーが「OK」をクリックしたかどうかを確認します。
- folderPath = .SelectedItems(1) & “\”
- ユーザーが選択したフォルダのパスを取得し、変数「folderPath」に格納します。
「& “\”」 で、フォルダパスの末尾に必ず「\」を追加しています。
- ユーザーが選択したフォルダのパスを取得し、変数「folderPath」に格納します。
- Else
MsgBox “フォルダが選択されませんでした。”
Exit Sub
End If- ユーザーがフォルダを選択しなかった場合、「フォルダが選択されませんでした。」というメッセージを表示し、処理を終了します。
Exit Sub によりサブルーチンの実行を中断します。
- ユーザーがフォルダを選択しなかった場合、「フォルダが選択されませんでした。」というメッセージを表示し、処理を終了します。
- End With
- With ステートメントの終了を示します。
ここで、フォルダ選択に関する操作は終了します。
- With ステートメントの終了を示します。
- i = 1
- セルの行番号として使用する「i」に、初期値として「1」を設定します。
これで、A列の1行目からファイル名が転記される準備が整います。
- セルの行番号として使用する「i」に、初期値として「1」を設定します。
- fileName = Dir(folderPath & “*.*”)
- Dir 関数を使って、指定したフォルダ内の最初のファイルを取得し、そのファイル名を変数「fileName」に格納します。
- Do While fileName <> “”
- 変数「fileName」が空でない限り、ループを繰り返します。
つまり、フォルダ内の全てのファイルを処理します。
- 変数「fileName」が空でない限り、ループを繰り返します。
- Cells(i, 1).Value = fileName
- Cells(i, 1) にファイル名を転記します。
「i」は現在の行番号、「1」は「A列」を示しています。
- Cells(i, 1) にファイル名を転記します。
- i = i + 1
- 次の行にファイル名を転記するために、「i」を「1」増やします。
これで次のファイル名はA列の次の行に転記されます。
- 次の行にファイル名を転記するために、「i」を「1」増やします。
- fileName = Dir
- Dir 関数を再度呼び出して、フォルダ内の次のファイルを取得します。
これにより、ループが続行されます。
- Dir 関数を再度呼び出して、フォルダ内の次のファイルを取得します。
- Loop
- Do While ループの終了を示します。
すべてのファイルを取得するまで、ループが繰り返されます。
- Do While ループの終了を示します。
- End Sub
- サブルーチンの終了を示します。
この時点で、選択したフォルダ内のすべてのファイルがA列に転記され、処理が完了します。
- サブルーチンの終了を示します。
このコードは、ユーザーが選択したフォルダ内の全てのファイルをExcelのセルにリスト表示するのに便利です。
特定のフォルダ内のファイルを一括で処理する場合などに応用できます。
これにより、ファイル選択や管理が簡単に行えるようになります。
まとめについて
エクセルVBAでファイル選択ダイアログや保存ダイアログを表示する「FileDialog」は、非常に多くの場面で活用できます。
基本的な「FileDialog」の使い方から、応用までを理解することで、ユーザーが簡単にファイル操作を行うことができるようになります。
ポイントのおさらい
さらに学ぶために
FileDialogの使い方に慣れてきたら、他のVBA機能も活用してみましょう。
ユーザーフォームやイベント処理など、VBAにはさまざまな機能も同等の処理を行うことができます。
これらを学ぶことで、さらに高度な自動化が可能になり、作業の効率化を図ることができます。
まずは、この記事の内容を実践し、FileDialogを使いこなせるようになってください。
次に進むための基礎がしっかりと身につくはずです。
この記事が役に立ったと思った方は、ぜひサイトマップから違う記事もご覧ください。