VBA FileDialogの使い方|ファイル選択・フォルダ選択と初期フォルダ

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
FileDialogについて

VBAでファイル選択ダイアログやフォルダ選択ダイアログを表示したいときは、Application.FileDialog を使うと、ユーザーにファイルやフォルダを選んでもらえます。

ファイルダイアログとは?

この記事では、VBA FileDialog の基本から、ファイル選択、フォルダ選択、初期フォルダ指定、msoFileDialogFolderPicker、複数選択、拡張子フィルター、キャンセル処理まで、コピペしながら使える形でまとめます。

サクッと結論

急いでいる方は、まず下の2つだけ見れば大丈夫です。

VBA ファイル選択ダイアログの最短コード

Sub PickOneFile()
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "ファイルを選択してください"
        .InitialFileName = "C:\サンプル\"
        .AllowMultiSelect = False

        If .Show = True Then
            MsgBox "選択したファイル:" & vbCrLf & .SelectedItems(1)
        End If
    End With
End Sub

VBA フォルダ選択ダイアログの最短コード

Sub PickOneFolder()
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "フォルダを選択してください"
        .InitialFileName = "C:\サンプル\"
        .AllowMultiSelect = False

        If .Show = True Then
            MsgBox "選択したフォルダ:" & vbCrLf & .SelectedItems(1)
        End If
    End With
End Sub

ポイント

.Show = True は、ユーザーがOKを押して選択したという意味です。
キャンセルされた場合は False になるため、この中の処理を実行しません。

【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度
目次

VBA FileDialogでファイル選択ダイアログを開く基本コード

FileDialogは、ざっくり言うと「VBAからWindowsの選択画面を呼び出すための入口」です。 ファイルを選ぶ、フォルダを選ぶ、保存先を指定する、選択したファイルを開く、といった操作を、ユーザーの手で安全に選ばせられます。

FileDialogを使うと便利な場面
  • 毎回ファイル名やフォルダ名が変わる処理
  • 処理対象ファイルをユーザーに選んでもらいたい処理
  • CSV、Excel、PDFなど、特定の拡張子だけを選ばせたい処理
  • 保存先フォルダや出力先フォルダをユーザーに選ばせたい処理
  • コード内に固定パスを書きたくない処理

VBA FileDialogの4種類|ファイル選択・フォルダ選択ダイアログ・Open・SaveAs

引数の「fileDialogType」について解説

「fileDialogType」には4つの種類があり、それぞれ異なる目的で使用されます。

これらを理解し使い分けることで、状況に応じた適切な動作を簡単に実装できます。
※各タイプの具体的な動作については、次のセクションで詳しく解説します。

スクロールできます
種類説明リンク
msoFileDialogOpenファイルを開くために使用使用例はこちら
msoFileDialogSaveAsファイルを保存するために使用使用例はこちら
msoFileDialogFilePickerファイル選択のために使用使用例はこちら
msoFileDialogFolderPickerフォルダ選択のために使用使用例はこちら

Application.FileDialogの引数・プロパティ・メソッド

VBAのFileDialogには、様々な「プロパティ」と「メソッド」があります。
ここでは、主要なものを紹介します。

FileDialogの「プロパティ」について解説

プロパティについて |初期フォルダを指定する方法 (InitialFileName) など

スクロールできます
プロパティ説明
InitialFileNameダイアログを開いたときに表示される初期のフォルダパスを指定します。
AllowMultiSelectファイルを複数選択できるようにするかどうか?を指定します。
Trueの場合、複数のファイルを選択
Falseの場合、1つのファイルのみ選択
Titleダイアログのタイトルを指定します。
Filtersダイアログに表示されるファイルのフィルターを設定します。
SelectedItemsユーザーが選択したファイルやフォルダのパスを取得します。

メソッドについて

スクロールできます
メソッド説明
Showダイアログを表示し、ユーザーが選択を完了するまで待機します。
Execute選択したファイルを開きます(msoFileDialogOpenの場合)。

より詳しい情報は、Microsoft公式 – FileDialog プロパティを参照してみてください。

VBA FileDialogの動作|fileDialogTypeで使い分ける4つのダイアログ

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

解説

このコードを実行すると、次の動作を行います。

  1. ダイアログが出てきて、ファイルが選択できるようになる。
  2. ファイルを選択する。
  3. 選択したファイルが開く
  4. 「選択したファイルを開きました」とメッセージボックスが出てくる。


詳細の設定は、次のように行っています。

コード詳細

  1. With Application.FileDialog(msoFileDialogOpen)
    • 今回は「msoFileDialogOpen」を使用しています。
      ※ファイルを開くためのダイアログボックスです。
  2. .InitialFileName = “C:\サンプル”
    • ダイアログを開いたときに表示される初期フォルダのパスを指定します。
  3. .AllowMultiSelect = False
    • ファイルを複数選択できるようにする場合は「True」とします。
  4. .Title = “msoFileDialogOpenの動作テスト”
    • ダイアログのタイトルを指定します。
  5. If .Show = True Then
    • ファイルを選択したかどうかを判断します。
      キャンセルした場合、何も実行しません。
  6. .Execute
    • 選択したファイルを開きます
  7. 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

解説

このコードを実行すると、次の動作を行います。

  1. ダイアログが出てきて、ファイルの保存箇所が選択できるようになる。
  2. フォルダを選択する。
    実行の際「ファイルの種類(T):」は、初期で「.xlsx」となっています。
     「.xlsm」に変更しないと、ファイル保存の際にエラーが出るので注意が必要です。
  3. ファイルが保存される。
  4. 「ファイルを保存しました」と、メッセージボックスが出てくる。


詳細の設定は、次のように行っています。

コード詳細

  1. Dim savePath As String
    • 「savePath」という変数を宣言します。
  2. With Application.FileDialog(msoFileDialogSaveAs)
    • 今回は「msoFileDialogSaveAs」を使用しています。
      ※ファイルを保存するためのダイアログボックスです。
  3. .InitialFileName = “C:\サンプル”
    • ダイアログを開いたときに表示される初期フォルダのパスを指定します。
      今回は保存を行いたいパスとなります。
  4. .AllowMultiSelect = False
    • ファイルを複数選択できるようにする場合は「True」とします。
  5. .Title = “msoFileDialogSaveAsの動作テスト”
    • ダイアログのタイトルを指定します。
  6. If .Show = True Then
    • ファイルを選択したかどうかを判断します。
      キャンセルした場合、何も実行しません。
  7. savePath = .SelectedItems(1)
    • 変数に取得したファイルパスを取得します。
  8. ActiveWorkbook.SaveAsFilename:=savePath,FileFormat:=xlOpenXMLWorkbookMacroEnabled
    • ファイルを保存します。
      今回は、拡張子を「.xlsm」で保存できるように設定しています。
  9. 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

解説

このコードを実行すると、次の動作を行います。

  1. ダイアログが出てきて、ファイルが選択できるようになる。
  2. ファイルを選択する。
  3. 「選択したファイルを開きました」と、メッセージボックスが出てくる。


詳細の設定は、次のように行っています。

コード詳細

  1. With Application.FileDialog(msoFileDialogFilePicker)
    • 今回は「msoFileDialogFilePicker」を使用しています。
      ※ファイルを選択するためのダイアログボックスです。
  2. .InitialFileName = “C:\サンプル”
    • ダイアログを開いたときに表示される初期フォルダのパスを指定します。
  3. .AllowMultiSelect = False
    • ファイルを複数選択できるようにする場合は「True」とします。
  4. .Title = “msoFileDialogFilePickerの動作テスト”
    • ダイアログのタイトルを指定します。
  5. If .Show = True Then
    • ファイルを選択したかどうかを判断します。
      キャンセルした場合、何も実行しません。
  6. 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

解説

このコードを実行すると、次の動作を行います。

  1. ダイアログが出てきて、フォルダーが選択できるようになる。
  2. フォルダーを選択する。
  3. 「選択したフォルダーを開きました」と、メッセージボックスが出てくる。


詳細の設定は、次のように行っています。

コード詳細

  1. With Application.FileDialog(msoFileDialogFolderPicker)
    • 今回は「msoFileDialogFolderPicker」を使用しています。
      ※フォルダーを選択するためのダイアログボックスです。
  2. .InitialFileName = “C:”
    • ダイアログを開いたときに表示される初期フォルダのパスを指定します。
  3. .AllowMultiSelect = False
    • ファイルを複数選択できるようにする場合は「True」とします。
  4. .Title = “msoFileDialogFolderPickerの動作テスト”
    • ダイアログのタイトルを指定します。
  5. If .Show = True Then
    • ファイルを選択したかどうかを判断します。
      キャンセルした場合、何も実行しません。
  6. MsgBox “フォルダが選択されました。” & vbLf & .SelectedItems(1)
    • メッセージボックスで、メッセージと選択し取得したフォルダーパスを表示させます。
ファイル処理を何度も使う方へ

1回だけ使うなら、ここまでのFileDialogコードで十分です。
ただし、複数ファイルの読み込み、フォルダ内ファイルの一覧化、Workbooks.Open、SaveAsを何度も組み合わせる場合は、毎回ゼロから書くよりテンプレート化した方が安定します。

ファイル選択・フォルダ選択・保存処理までまとめて使い回したい方は、次の記事で実務用の型を確認してください。

VBAファイル処理テンプレートを見る

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

処理結果

使用例1: 複数のファイル名を取得し、メッセージボックスで表示するの結果

コードの動作概要

STEP
ダイアログボックスを開く

Application.FileDialog(msoFileDialogFilePicker)を使用して、ユーザーにファイル選択のためのダイアログボックスを表示します。

STEP
ファイルの複数選択を許可

.AllowMultiSelect = True によって、複数のファイルを一度に選択できるように設定します。

STEP
選択されたファイルを処理

ユーザーが選択したすべてのファイルをループで処理し、そのファイル名をselectedFilesに取得します。

STEP
結果を表示

選択されたファイルのリストをメッセージボックスで表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. With Application.FileDialog(msoFileDialogFilePicker)
    • 今回は「msoFileDialogFilePicker」を使用しています。
      ※ファイルを選択するためのダイアログボックスです。
  2. InitialFileName = “C:\サンプル”
    • ダイアログを開いたときに表示される初期フォルダのパスを指定します。
  3. .AllowMultiSelect = True
    • 複数のファイルを選択できるようにするため「True」に設定します。
  4. .Title = “使用例1: 複数のファイルをダイアログで選択する”
    • ダイアログのタイトルを指定します。
  5. If .Show = True Then
    • ファイルを選択したか?判断を行います。
      キャンセルした場合、何も実行しません。
  6. For i = 1 To .SelectedItems.Count
     selectedFiles = selectedFiles & .SelectedItems(i) & vbLf
    Next i
    • 複数ファイルを選択した場合、「.SelectedItems.Count」でカウントし、
      そのファイル数をFor文でループしてファイル名を「selectedFiles」に取得します。
  7. 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

処理結果

使用例2: フィルターを使用し、特定のファイルだけ選択するの結果

コードの動作概要

STEP
ダイアログボックスを開く

Application.FileDialog(msoFileDialogFilePicker)を使用して、ユーザーにファイル選択のためのダイアログボックスを表示します。

STEP
初期フォルダとタイトルを設定

.InitialFileName = “C:\サンプル” でダイアログを開いた際に表示される初期フォルダのパスを指定し、.Title でダイアログのタイトルを設定します。

STEP
ファイルフィルターを追加

.Filters.Clear で既存のフィルターをクリアし、.Filters.Add を使って「Excelファイル」や「すべてのファイル」を表示するフィルターを追加します。

STEP
ファイルの選択

ユーザーがファイルを選択した場合、そのファイルのパスをメッセージボックスで表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. With Application.FileDialog(msoFileDialogFilePicker)
    • 今回は「msoFileDialogFilePicker」を使用しています。
      ※ファイルを選択するためのダイアログボックスです。
  2. InitialFileName = “C:\サンプル”
    • ダイアログを開いたときに表示される初期フォルダのパスを指定します。
  3. .AllowMultiSelect = False
    • ファイルを1つしか選択できないように「False」を設定します。
  4. .Title = “使用例2: ファイルフィルターを追加して選択する”
    • ダイアログのタイトルを指定します。
  5. .Filters.Clear
    • 既存のフィルターをクリアします。
  6. .Filters.Add “Excel Files”, “*.xlsx; *.xlsm”, 1
    .Filters.Add “All Files”, “.“, 2
    • エクセルファイルのみを表示するフィルター 及び、すべてのファイルを表示するフィルターを追加します。
      インデックス番号「1や2」は、フィルターが表示される順番になります。

      filter.addのインデックス番号はどのようになるか?
  7. 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

処理結果

使用例3: ファイル選択をキャンセルしてもエラーが発生しない処理の結果

コードの動作概要

STEP
ファイル選択の処理

MainProcess サブルーチンを実行し、関数「SelectFileDialog」を呼び出してファイル選択ダイアログを表示します。
ユーザーがファイルを選択した場合、そのパスを変数「filePath」に格納します。

STEP
キャンセルチェック

If filePath = “” Then の条件で、ファイル選択がキャンセルされたかどうかを確認します。
キャンセルされた場合、メッセージを表示してサブルーチンを終了します。

STEP
ファイルの処理

ファイルが選択された場合のみ、選択されたファイルのパスをメッセージボックスに表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub MainProcess()
    • ここでは新しいサブルーチン(プロシージャ)を定義しています。
      Subは「サブプロシージャ」を意味し、MainProcessはこのプロシージャの名前です。
      このプロシージャが呼び出されると、指定された一連の処理が実行されます。
  2. Dim filePath As String
    • 変数「filePath」を宣言しています。
      String型の変数で、ファイルのパス(ファイルの場所)を格納するために使用します。
  3. filePath = SelectFileDialog()
    • ここでは、「SelectFileDialog」という関数を呼び出し、その戻り値(選択されたファイルのパス)を変数「filePath」に格納します。
      「SelectFileDialog()」は、後ほど定義される関数で、ファイルダイアログを表示し、選択されたファイルのパスを返します。
  4. If filePath = “” Then
    • If文を使って、変数「filePath」が空の文字列であるかどうかをチェックします。
      ここでは、ユーザーがファイル選択ダイアログで「キャンセル」をクリックした場合(filePathが空文字列となる場合)に備えた処理を行っています。
  5. MsgBox “キャンセルされました。処理を終了します。”
    • MsgBox関数を使ってメッセージボックスを表示します。
      ここでは「キャンセルされました。処理を終了します。」というメッセージが表示されます。
  6. Exit Sub
    • Exit Sub命令でサブルーチンを途中で終了します。
      ここでは、ユーザーがファイル選択をキャンセルした場合、これ以上の処理を行わずに終了するために使用します。
  7. End If
    • If文の終了を示します。
      これ以降の処理は、ファイルが選択されたかどうかに関わらず実行されます。
  8. MsgBox “選択されたファイル: ” & filePath
    • この行では、選択されたファイルのパスを表示します。
      MsgBoxで表示するメッセージにfilePathの内容を連結(&)して、「選択されたファイル: [ファイルパス]」というメッセージを表示します。
      これにより、ユーザーはどのファイルを選んだか確認できます。
  9. End Sub
    • これはサブルーチンの終了を示しています。
      MainProcessプロシージャの処理がここで終了します。

  1. Function SelectFileDialog() As String
    • ここで新しい関数「SelectFileDialog」を定義しています。
      この関数はファイルダイアログを表示し、ユーザーが選択したファイルのパスを文字列(String 型)として返す機能を持っています。
      この関数は、ファイルが選択されなかった場合には空の文字列を返します。
  2. With Application.FileDialog(msoFileDialogFilePicker)
    • Withステートメントは、指定したオブジェクトに対して複数のプロパティやメソッドを続けて実行するために使用されます。
      ここでは、Application.FileDialog(msoFileDialogFilePicker)オブジェクト(ファイル選択ダイアログボックス)に対して操作を行います。
  3. .Title = “ファイルを選択してください”
    • ファイル選択ダイアログのタイトルを「ファイルを選択してください」に設定しています。
      このタイトルはダイアログボックスのウィンドウ上部に表示されます。
  4. .InitialFileName = “C:\サンプル”
    • ダイアログが開いたときに最初に表示される初期フォルダのパスを指定しています。
      ここでは、「C:\サンプル」というフォルダが最初に表示されるように設定されています。
  5. .AllowMultiSelect = False
    • ユーザーが複数のファイルを選択できるかどうかを設定しています。
      Falseに設定することで、ユーザーは1つのファイルしか選択できません。
  6. If .Show = True Then
    • ファイルダイアログを表示し、ユーザーがファイルを選択したかどうかを確認します。
      Showメソッドはダイアログを表示し、「OK」がクリックされた場合は「True」を返し、「キャンセル」がクリックされた場合は「False」を返します。
  7. SelectFileDialog = .SelectedItems(1)
    • ユーザーが選択したファイルのパスを、関数「SelectFileDialog」の戻り値として設定します。
      .SelectedItems(1)で、ユーザーが選択した最初のファイルのパスを取得します。
  8. Else
    ‘// キャンセルされた場合は空の文字列を返す
    SelectFileDialog = “”
    • If文の「それ以外」のケースを指定しています。
      ここでは、ユーザーがファイル選択をキャンセルした場合の処理を定義しています。
    • ユーザーがファイル選択をキャンセルした場合、空の文字列””を関数の戻り値として設定します。
      これにより、MainProcessサブルーチンでキャンセルを検知できるようになります。
  9. End If
    • If文の終了を示します。
      これ以降の処理は、ファイルが選択されたかどうかに関わらず実行されます。
  10. End With
    • Withステートメントの終了を示します。
      ここで、FileDialogオブジェクトに対する操作が終了します。
  11. 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

処理結果

使用例4: フォルダを選択し、保管されているファイルをセルに転記する方法の結果

コードの動作概要

STEP
ダイアログボックスを開く

Application.FileDialog(msoFileDialogFolderPicker) を使用して、フォルダを選択するためのダイアログボックスを表示します。

STEP
フォルダのパスを取得

ユーザーが選択したフォルダのパスを変数「folderPath」に格納します。

STEP
Dir関数でファイルリストを取得

Dir 関数を使用して、フォルダ内の最初のファイルを取得し、それをセルに転記します。

STEP
次のファイルを取得してループ

Do While ループを使い、フォルダ内の全てのファイルを順に取得し、Excelのセルに転記します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub FolderToCell()
    • ここでは、新しいサブルーチン FolderToCell を定義しています。
      Excelのセルにフォルダ内のファイルをリスト表示する処理を行います。
  2. Dim folderPath As String
    • 「folderPath」は選択されたフォルダのパスを格納する文字列型の変数です。
  3. Dim fileName As String
    • 「fileName」はフォルダ内のファイル名を格納するための文字列型の変数です。
  4. Dim i As Long
    • 「i」は、セルの行番号を管理するための整数型の変数です。
  5. With Application.FileDialog(msoFileDialogFolderPicker)
    • Application.FileDialog(msoFileDialogFolderPicker) を使って、フォルダを選択するためのダイアログを表示します。
      With ステートメントを使うことで、同じオブジェクトに対する複数の操作を簡潔に記述できます。
  6. .InitialFileName = “C:\サンプル”
    • ダイアログを開いたときの初期フォルダのパを指定します。
      ここでは「C:\サンプル」が初期フォルダとして表示されます。
  7. .Title = “フォルダを選択してください”
    • ダイアログボックスのタイトル(ウィンドウ上部に表示されるテキスト)を「フォルダを選択してください」に設定します。
  8. If .Show = True Then
    • ダイアログを表示し、ユーザーが「OK」をクリックしたかどうかを確認します。
      「True」ならばフォルダが選択され、「キャンセル」を押された場合は「False」となります。
  9. folderPath = .SelectedItems(1) & “\”
    • ユーザーが選択したフォルダのパスを取得し、変数「folderPath」に格納します。
      「& “\”」 で、フォルダパスの末尾に必ず「\」を追加しています。
  10. Else
    MsgBox “フォルダが選択されませんでした。”
    Exit Sub
    End If
    • ユーザーがフォルダを選択しなかった場合、「フォルダが選択されませんでした。」というメッセージを表示し、処理を終了します。
      Exit Sub によりサブルーチンの実行を中断します。
  11. End With
    • With ステートメントの終了を示します。
      ここで、フォルダ選択に関する操作は終了します。
  12. i = 1
    • セルの行番号として使用する「i」に、初期値として「1」を設定します。
      これで、A列の1行目からファイル名が転記される準備が整います。
  13. fileName = Dir(folderPath & “*.*”)
    • Dir 関数を使って、指定したフォルダ内の最初のファイルを取得し、そのファイル名を変数「fileName」に格納します。
  14. Do While fileName <> “”
    • 変数「fileName」が空でない限り、ループを繰り返します。
      つまり、フォルダ内の全てのファイルを処理します。
  15. Cells(i, 1).Value = fileName
    • Cells(i, 1) にファイル名を転記します。
      「i」は現在の行番号、「1」は「A列」を示しています。
  16. i = i + 1
    • 次の行にファイル名を転記するために、「i」を「1」増やします。
      これで次のファイル名はA列の次の行に転記されます。
  17. fileName = Dir
    • Dir 関数を再度呼び出して、フォルダ内の次のファイルを取得します。
      これにより、ループが続行されます。
  18. Loop
    • Do While ループの終了を示します。
      すべてのファイルを取得するまで、ループが繰り返されます。
  19. End Sub
    • サブルーチンの終了を示します。
      この時点で、選択したフォルダ内のすべてのファイルがA列に転記され、処理が完了します。

このコードは、ユーザーが選択したフォルダ内の全てのファイルをExcelのセルにリスト表示するのに便利です。
特定のフォルダ内のファイルを一括で処理する場合などに応用できます。
これにより、ファイル選択や管理が簡単に行えるようになります。

VBAを体系的に学びたい方へ

FileDialog、Dir、For、If、Functionが混ざると、コピペだけでは不安になることがあります。 基礎から確認したい方には、動画講座や入門記事を補助として使うのが向いています。

VBAの学習ロードマップを見る
VBAの学習ロードマップをスマホで読むためのQRコード

スマホで後から読む

VBA FileDialogのFAQ|GetOpenFilenameとの違いと参照設定

最後に、FileDialogと良く混同するGetOpenFilename との違い、参照設定、初期フォルダが開かない場合の確認ポイントをまとめます。 

VBA FileDialogとGetOpenFilenameの違い

スクロールできます
比較項目Application.FileDialogApplication.GetOpenFilename
主な用途ファイル選択、フォルダ選択、保存、開くファイル名・ファイルパスの取得
フォルダ選択msoFileDialogFolderPicker で可能基本的には対象外
選択結果SelectedItems から取得戻り値で取得
キャンセル時.Show の結果で判定False が返る
おすすめ場面ファイル選択とフォルダ選択を同じ記事・
同じ仕組みで覚えたい
ファイルを1つ選ばせるだけの短い処理を書きたい

msoFileDialogFolderPickerの参照設定とFAQ

Excel VBAで Application.FileDialog(msoFileDialogFolderPicker) を使う場合、通常はExcelのVBA環境からそのまま使えます。 もし msoFileDialogFolderPicker が認識されない場合は、定数名の入力ミス、Office環境、参照設定、実行場所を確認します。

FileDialogの使用に参照設定は必要ですか?

Excel VBAで Application.FileDialog を使う場合、通常はそのまま使えます。 Word、Outlook、Accessなど別のOfficeアプリから使う場合や、msoFileDialogFolderPicker などの定数が認識されない場合は、Microsoft Office Object Libraryの参照設定や、定数名のスペルを確認してください。

SelectedItems(2)以降も使えますか?

使えます。
.AllowMultiSelect = True にして複数ファイルを選んだ場合、.SelectedItems(1).SelectedItems(2) のように1始まりで取得できます。 件数は .SelectedItems.Count で確認します。

OutlookやWord VBAでFileDialogが動かない理由は?

Excelの Application.FileDialog と同じ感覚で書くと、実行しているOfficeアプリの違いや参照設定の違いでエラーになることがあります。 Excel以外で使う場合は、実行元アプリのオブジェクトモデル、Office Object Libraryの参照、定数が認識されているかを確認します。

Filters.Addを何度も呼ぶとフィルターが増えるときは?

.Filters.Add の前に .Filters.Clear を入れます。 これを忘れると、同じダイアログ設定を繰り返し使うときにフィルターが累積して、選択肢が増えて見づらくなります。

InitialFileNameに存在しないパスを渡したらどうなりますか?

指定した場所で開かず、前回の場所や既定の場所が表示されることがあります。 実務コードでは Dir 関数などでフォルダの存在を確認し、存在しない場合は ThisWorkbook.Path やドキュメントフォルダへ切り替えると安定します。

フォルダ選択でファイルも一緒に選べますか?

同じダイアログでファイルとフォルダを同時に選ぶ用途には向きません。 ファイルを選ぶなら msoFileDialogFilePicker、フォルダを選ぶなら msoFileDialogFolderPicker を使い分け、必要ならダイアログを2回表示します。

よくあるミスと対策を見る
スクロールできます
症状原因の例対策
キャンセル時にエラーになる.Show の判定前に SelectedItems(1) を
読んでいる
If .Show = True Then の中だけで取得する
初期フォルダが思った場所にならないパスが存在しない、末尾の \ がない、
古い履歴が使われる
存在するフォルダパスを指定し、必要なら Dir で事前確認する
フォルダが選べないmsoFileDialogFilePicker を使っているmsoFileDialogFolderPicker に変更する
複数選択の処理で型が合わない複数の結果を1つの文字列として扱っているFor で SelectedItems を1件ずつ処理する
保存時に拡張子エラーが出る拡張子と FileFormat が合っていない.xlsm なら xlOpenXMLWorkbookMacroEnabled を使う
スポンサーリンク

VBA FileDialogのまとめと次に読む記事

さらに学ぶために

FileDialogの使い方に慣れてきたら、他のVBA機能も活用してみましょう。

ユーザーフォームやイベント処理など、VBAにはさまざまな機能も同等の処理を行うことができます。
これらを学ぶことで、さらに高度な自動化が可能になり、作業の効率化を図ることができます。

まずは、この記事の内容を実践し、FileDialogを使いこなせるようになってください。
次に進むための基礎がしっかりと身につくはずです。

VBAを体系的に学びたい方へ

FileDialog、Dir、For、If、Functionが混ざると、コピペだけでは不安になることがあります。
基礎から確認したい方には、動画講座や入門記事を補助として使うのが向いています。

VBAの学習ロードマップを見る

まずは、この記事の内容を実践し、FileDialogを使いこなせるようになってください。次に進むための基礎がしっかりと身につくはずです。

この記事が役に立ったと思った方は、ぜひサイトマップから違う記事もご覧ください。

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「共通」を見る 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次