【初心者向け】Excel VBAでフォルダを選ばせるマクロをゼロから理解しよう

Excel-VBA

こんにちは、じんぺいです。

Excelでマクロ(VBA)を使いたいけど、
「どこから手をつけていいかわからない…」「難しそう…」
そんな初心者のあなたに向けて、なるべくやさしく順を追って「ユーザーにフォルダを選ばせるマクロ」の作り方を説明します。

もし マクロの使い方に不安があるなら、まずはこちらの記事を参考にしてみてください
初心者向け!まず覚えるべきExcelマクロの基本操作3つ


1. フォルダを選ぶマクロの基本形

まずは、最小限のコードで「フォルダを選んでもらって、そのパスを取得する」動作を作ります。

Sub SelectFolderBeginner()

    Dim fd As FileDialog
    Dim folderPath As String

    ' フォルダを選ぶダイアログを準備
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    fd.Title = "フォルダを選択してください"

    ' ユーザーが「OK」を押したら処理を続ける
    If fd.Show = -1 Then
        folderPath = fd.SelectedItems(1)
        MsgBox "選ばれたフォルダ:" & vbCrLf & folderPath, vbInformation
    Else
        MsgBox "フォルダの選択がキャンセルされました。", vbExclamation
    End If

End Sub

このコードを VBA に貼って「実行」すれば、フォルダ選択画面が出て、選択後にパスが表示されるはずです。


2. 一行ずつ丁寧に解説(初心者向け)

上のコードを、なるべくわかりやすく分解して説明します。

コード何をしているか補足・初心者向けポイント
Dim fd As FileDialogダイアログを扱う変数 fd を用意まず “箱” を用意するイメージ
Dim folderPath As Stringフォルダパスを入れる文字列変数を用意選んだパスをここに保管します
Set fd = Application.FileDialog(msoFileDialogFolderPicker)フォルダ選択用のダイアログを使えるようにするmsoFileDialogFolderPicker が “フォルダを選ぶ” 指定子
fd.Title = "フォルダを選択してください"ダイアログの上部に出る案内文を設定読みやすい文にしておくと親切
If fd.Show = -1 Thenユーザーが OK を押したかどうか判定OK=−1、キャンセル=0 というルールです
folderPath = fd.SelectedItems(1)選ばれたフォルダのパスを変数に入れるSelectedItems は選択されたアイテムの集合
MsgBox …結果をポップアップで表示確認用として使います
Else … End Ifキャンセル時の処理キャンセル対応を入れておくと安全です

3. 応用:フォルダ内のファイルを順に処理する

次は、選んでもらったフォルダの中にあるファイルをひとつずつ扱いたいケースです。

Sub ProcessFilesInSelectedFolder()

    Dim fd As FileDialog
    Dim folderPath As String
    Dim fname As String

    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    fd.Title = "処理するフォルダを選んでください"

    If fd.Show = -1 Then
        folderPath = fd.SelectedItems(1)
        
        ' フォルダ内のすべてのファイル名を取得
        fname = Dir(folderPath & "\*.*")
        Do While fname <> ""
            ' フルパスを表示(または処理に使う)
            Debug.Print folderPath & "\" & fname

            ' ここに「ファイルを開く」「読み込む」などの処理を入れる

            fname = Dir()  ' 次のファイルを取得
        Loop
    Else
        MsgBox "キャンセルされました。", vbExclamation
    End If

End Sub

この仕組みにより、選んでもらったフォルダのすべてのファイルを順番に処理できます。


4. 初心者がつまづきやすいポイントと対策

マクロ初心者の方がよくハマる点をいくつか挙げ、それぞれの対策を紹介します。

キャンセル時にエラーになる

もし If fd.Show = -1 の分岐を入れずに SelectedItems(1) を使うと、
キャンセル時に「実行時エラー」が出てしまいます。
必ず If … Then … Else で分岐を入れましょう。

“\(バックスラッシュ)” を忘れる

フォルダパスとファイル名をつなぐときに、
たとえば folderPath & "*.*" のように書くと失敗します。
正しくは folderPath & "\*.*" のように、\ を忘れない ように注意してください。

空のフォルダ or ファイル無しの場合の対応

フォルダにファイルがないと Dir がすぐ空文字列を返します。
Do While fname <> "" のループは一度も中に入らないこともあるので、
そのケースを考慮した処理を入れておくと親切です。


5. 練習アイデアで理解を深めよう

以下の課題をやってみると理解が深まります。

  • フォルダ内のファイル名を Excel のシートに一覧表示する
  • 拡張子(例:.xlsx, .txt)でファイルを絞って処理する
  • 選んだフォルダ内のファイルを別フォルダにコピーするマクロを作る
  • サブフォルダも含めて再帰的に処理するように拡張する

まとめ(初心者向けに振り返り)

  • Application.FileDialog(msoFileDialogFolderPicker) を使うと、フォルダ選択ダイアログが出せる
  • If fd.Show = -1 で OK 押下の判定
  • fd.SelectedItems(1) で選ばれたフォルダのパスを取得
  • Dir とループを使えばフォルダ内ファイルを一括処理できる
  • 初心者がハマりやすいポイントには対策を入れておく

コメント

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