VBAのFileDialog(ファイルダイアログ)を使ってファイル選択・初期フォルダ設定・ファイル名取得を簡単に

FileDialogについて VBA

「VBAでダイアログボックスを表示して、特定のファイルを選択・保存したりしたいな。。。」
このように思ったことはありませんか?

このようなことがしたい
  • ダイアログボックスで「ファイル」や「フォルダ」を自分で選択したい。

    このようなダイアログを表示させたい

この記事では、エクセルVBAを使って「FileDialog (ファイルダイアログ)」を利用する方法を詳しくご紹介します。

「FileDialog」を使用することで、ユーザーが簡単に「フォルダ」や「ファイル」を選択できるようになり、手作業でのファイル指定が不要になります。
これにより、選択ミスが減り、作業効率が大幅に向上します。

基本的な使い方から応用的なテクニックまで、初心者でもすぐに実践できる内容です。
ぜひ最後までお読みください。


【 この記事の概要 】

  よく使う度    3.5  
  難しさ     2.0  
  覚えておくと安心度    4.0  

この記事を見てできるようになること

この記事を読めば、以下のことができるようになります。

この記事を見てできるようになること

VBAの「FileDialog」ってなに?

VBAの「FileDialog (ファイルダイアログ)」は、次のような画面 (ダイアログボックス)から「ファイルを選択」「ファイルを保存」することができます。

「FileDialog」を活用することで、作業の正確性と効率が向上し、手作業によるミスを最小限に抑えることができます。

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

それでは、「FileDialog」の構成について説明を行っていきます。

VBAのコード量が多くて大変そうに思えるかもしれませんが、心配いりません。
必要な部分をコピペして使いまわすだけで十分活用できます。

VBAの「FileDialog」の構成を解説

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

「fileDialogType」には4つの種類があり、それぞれ異なる目的で使用されます。
これらを理解し使い分けることで、状況に応じた適切な動作を簡単に実装できます。
※各タイプの具体的な動作については、次のセクションで詳しく解説します。

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

FileDialogの「引数」と「メソッド」について解説

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

プロパティについて

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

解説

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

動作の詳細
  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)
    • メッセージボックスで、メッセージと選択し取得したフォルダーパスを表示させます。

VBAの「FileDialog」は、どのようなときに使用するか?

「FileDialog (ファイルダイアログ)」は、次のようなシーンで非常に役立ちます。

よく使われる事例
  • 特定のファイルを選択して開きたいとき
    • ユーザーに任意のExcelファイルを選ばせ、その内容を処理するプログラムを作成する際に使用すると便利です。
  • 複数のファイルをまとめて処理したいとき
    • 複数の画像ファイルを選択し、リサイズやフォーマット変換を行う場合など、複数ファイルを一括で選択して処理したいときに役立ちます。
  • ユーザーに保存先を指定させたいとき
    • 作成したレポートをPDF形式で保存するなど、ユーザーが保存場所やファイル名を自由に選べるようにしたいときに使うと便利です。
  • フォルダー単位で操作したいとき
    • 特定のフォルダー内にあるすべてのExcelファイルを開いて処理するプログラムを作成する際に、ユーザーにフォルダーを選ばせることができます。

VBAの「FileDialog」を使用するうえでの、注意ポイント

  • ファイルの選択とフォルダーの選択は同時に行えない
    • FileDialogでは、ファイルの選択とフォルダーの選択を同時に行うことができません
      同時に両方を取得したい場合は、FileDialogのコードを個別に記載して、別々に取得する必要があります。
  • ユーザーの選択キャンセルへの対応
    • FileDialogでユーザーがファイルやフォルダを選択せずにキャンセルボタンを押した場合、エラーが発生することがあります。
      そのため、If .Show = True Then を使って、選択が行われたかどうかを必ずチェックし、選択がキャンセルされた場合の処理(何もしない、またはメッセージを表示するなど)を適切に行うことが重要です。
  • AllowMultiSelectの設定に注意
    • AllowMultiSelectプロパティをTrueに設定すると、複数のファイルやフォルダを選択できるようになりますが、複数選択時の処理が複雑になる場合があります。
      選択された複数の項目をどのように処理するかをあらかじめ設計しておくことが必要です。
  • フィルター設定の順番に注意
    • 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行ずつ解説

コード詳細
  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
動作概要
  • STEP1
    ダイアログボックスを開く

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

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

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

  • STEP3
    ファイルフィルターを追加

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

  • STEP4
    ファイルの選択

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

処理結果

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

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
動作概要
  • STEP1
    ファイル選択の処理

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

  • STEP2
    キャンセルチェック

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

  • STEP3
    ファイルの処理

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

処理結果

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

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. MsgBox “選択されたファイル: ” & filePath
    • この行では、選択されたファイルのパスを表示します。
      MsgBoxで表示するメッセージにfilePathの内容を連結(&)して、「選択されたファイル: [ファイルパス]」というメッセージを表示します。
      これにより、ユーザーはどのファイルを選んだか確認できます。
  8. End Sub
    • これはサブルーチンの終了を示しています。
      MainProcessプロシージャの処理がここで終了します。

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

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

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

  • ラベル
    次のファイルを取得してループ

    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」は、非常に多くの場面で活用できます。

基本的な「FileDialog」の使い方から、応用までを理解することで、ユーザーが簡単にファイル操作を行うことができるようになります。

ポイントのおさらい

さらに学ぶために

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

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

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

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

タイトルとURLをコピーしました