【Excelマクロ】フォルダを選択させる方法を身につけましょう

フォルダを自分で選ばせたいとき、どうすれば良いでしょうか?

Excelマクロでファイルを扱うとき、次のような悩みはありませんか?

  • 「処理対象のフォルダを毎回コードで書き換えるのが面倒」
  • 「他の人にも使わせたいけど、パスを変えてもらうのが大変」
  • 「処理のたびにフォルダを選べたら便利なのに…」

そんなときに役立つのが、「フォルダ選択ダイアログを表示する方法」です。

実装するメリット

  • 利用者が毎回、フォルダを手動で選べるようになる
  • コードを何度も書き換えずに済む
  • 汎用性の高いマクロが作れる
  • 他の人と共有しやすくなる

Application.FileDialog

VBAでフォルダを選ばせるには、次のような構文を使います。

Sub SelectFolderExample()

    Dim folderPath As String

    ' フォルダ選択ダイアログを表示する

    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "フォルダを選択してください"
        .AllowMultiSelect = False

        If .Show = -1 Then ' 選択された場合
            folderPath = .SelectedItems(1)
            MsgBox "選択されたフォルダ:" & folderPath
        Else
            MsgBox "キャンセルされました。"
        End If
    End With

End Sub

解説

  • Application.FileDialog(...)
    ファイルやフォルダ選択用のダイアログを呼び出します。
  • msoFileDialogFolderPicker
    「フォルダを選択する」ための種類です。これを変えるとファイル選択などもできます。
  • .Show = -1
    → ダイアログで「OK」が押された場合にTrue(-1)になります。
  • .SelectedItems(1)
    → 選ばれたフォルダのパスを取得します(配列のような形式)。

よくある質問と注意点

Q:複数のフォルダを選べますか?

.AllowMultiSelect = True にすれば可能ですが、フォルダ選択では非対応のことが多いです。

Q:キャンセルされたときの処理は?

.Show = -1 のチェックを使って、キャンセルされたら何もしないようにできます。

Q:ファイルを選ばせるには?

msoFileDialogFilePicker に変更すればOKです。

応用:選択したフォルダのファイルを一覧に表示

Sub ListFilesInSelectedFolder()

    Dim folderPath As String
    Dim fileName As String
    Dim i As Long

  'フォルダパスの最後に¥があればそのまま、ないのであれば、¥をつける
    If Application.FileDialog(msoFileDialogFolderPicker).Show = -1 Then
        folderPath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
        If Right(folderPath, 1) <> "¥" Then
      folderPath = folderPath & "¥"
    End If

        fileName = Dir(folderPath & "*.*")

        i = 1

    'フォルダ内のファイルがなくなるまで処理をする
        Do While fileName <> ""
            Cells(i, 1).Value = fileName
            i = i + 1
            fileName = Dir()
        Loop

        MsgBox "一覧の出力が完了しました。"
    Else
        MsgBox "キャンセルされました。"
    End If

End Sub

まとめ

FileDialog を使うことで、利用者が自由にフォルダを選択できるようになり、マクロの柔軟性が大きく向上します。

これにより、利用者自身が処理対象のフォルダをその場で選べるようになり、コードを変更することなく何度でも使い回せるマクロを作ることが可能になります。

さらにこの仕組みは、フォルダ選択だけでなく、ファイル単位の選択複数ファイル処理にも応用が可能です。最初は少し難しく感じるかもしれませんが、FileDialog の構造に慣れれば、非常に実用的で扱いやすいツールになります。

ぜひ今回紹介したコードを参考に、「実務で使える、柔軟なマクロ」を1つ作ってみてください。小さな一歩から、VBAの世界がぐっと広がっていきます。

コメント