VBA|FileDialogとGetOpenFilenameでファイル・フォルダを選択する基本構文と活用例

VBA & Excel
スポンサーリンク

VBAでファイルを開こうとすると、最初に思いつくのはこの一言ではないでしょうか。

filePath = InputBox(“ファイルのパスを入力してください”)

…いやいや、手打ち!? 毎回フルパスをコピペして、拡張子の .xlsx をつけ忘れて、開こうとしたら謎のエラー。

あの頃の私は、“InputBox道場”の住人でした。

でもある日ふと思ったんです。

「世の中には“選べる”っていう、すごく文明的な方法があるらしい」と──

この記事では、そんな手入力ループから抜け出すための一歩として、 GetOpenFilenameとFileDialog、2つのファイル選択ダイアログの使い方と活用例をまとめていきます。

「どっちを使えばいいの?」「フォルダも選べるって本当?」という疑問も解消できるように、 やさしく丁寧にご案内します。

InputBoxにお別れを告げるその瞬間、ちょっと清々しい気分になれるかもしれません。

スポンサーリンク
  1. 基礎編①:GetOpenFilenameの使い方と特長
    1. 基本の書き方と戻り値の考え方
    2. ファイルの種類を指定(フィルタ)
    3. 複数ファイルの選択もOK
    4. 実務での使いどころ
    5. 小まとめ:InputBoxの次に覚える1歩として最適!
  2. 基礎編②:FileDialogの使い方と特長
    1. FileDialogの基本構文(ファイル選択編)
    2. フォルダを選ぶFileDialog(FolderPicker)
    3. 保存先を選ぶFileDialog(SaveAs風)
    4. FileDialogでできること一覧(まとめ)
    5. FileDialogの特長まとめ
    6. 小まとめ:「ちょっと手間だけど、ちゃんと選べる」安心感
  3. 比較編:GetOpenFilenameとFileDialog、結局どっち使えばいいの?
    1. 比較一覧|構文・できること・向いている用途
    2. 結論:選び方の目安
      1. とりあえず1つのファイルを選ばせたいだけ → GetOpenFilename
      2. 複数選択、フォルダ選択、保存先選択などもしたい → FileDialog
    3. おすすめポイント
  4. 応用例①:選んだファイルを開いて処理する
    1. やりたいことの流れ
    2. サンプルコード:GetOpenFilenameを使う場合
    3. ポイントと補足
    4. FileDialogを使った書き方(比較として)
    5. 実務での活用例アイディア
    6. 小まとめ:「選ばせて処理」の組み合わせが、マクロの幅を広げる
  5. 応用例②:選んだフォルダ内のすべてのExcelファイルに処理をかける
    1. やりたいことの流れ
    2. サンプルコード:FileDialog+Dir関数の組み合わせ
    3. 補足ポイント
    4. 応用アイディア
    5. 実務での活用例
    6. 小まとめ:手作業ゼロで、処理ミスもゼロへ
  6. まとめ:パスを手で打つ時代に、さようなら
    1. “選ばせる”だけでコードが強くなる
    2. GetOpenFilename vs FileDialog、どちらも正解
    3. 最後に:ダイアログは、マクロの“やさしさ”の入り口

基礎編①:GetOpenFilenameの使い方と特長

マクロに「ファイルを選ばせたい」と思ったときに登場する便利な相棒が、GetOpenFilenameです。

まずはこの構文を押さえておくと、「InputBoxにパスを貼り付ける毎日」から一歩前進できます。

基本の書き方と戻り値の考え方

Dim filePath As Variant
filePath = Application.GetOpenFilename("Excelファイル,*.xlsx")

If filePath <> False Then
    MsgBox "選択されたファイル:" & filePath
End If

はい、これだけです。 ユーザーがファイルを選ぶと、そのフルパス(文字列)がfilePathに返ってきます。

キャンセルされた場合はFalseが返るので、条件分岐で丁寧に扱ってあげましょう。

ファイルの種類を指定(フィルタ)

第1引数で、表示するファイルの種類を限定できます。

"Excelファイル,*.xlsx;*.xlsm"

複数の拡張子を含めたい場合は、セミコロン ; で区切ります。

複数ファイルの選択もOK

Dim files As Variant
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = True

おっと、ここで登場したのはFileDialogですね。

実はGetOpenFilenameでは複数選択はできません。 複数選びたいときは、次章のFileDialogを使っていきましょう。

実務での使いどころ

  • 「この1ファイルだけ選んで読み込みたい」
  • 「複数ある中から1つだけ、ユーザーに選ばせたい」
  • 「使い回しやすい“パス取得マクロ”が欲しい」

こういった場面では、GetOpenFilenameがシンプルで手軽な選択肢になります。

特に、「パスだけ知りたい」だけなら十分すぎる実力です。

小まとめ:InputBoxの次に覚える1歩として最適!

  • 書き方が短くてわかりやすい
  • 戻り値はファイルパス(String)またはFalse(キャンセル)
  • 拡張子のフィルタも柔軟に指定できる

次章ではいよいよFileDialogの出番です。

「ファイルもフォルダも、なんなら保存先まで選ばせたい!」という、欲張りさんのための高機能ダイアログをご紹介します。

基礎編②:FileDialogの使い方と特長

「もっと自由に選びたい」──

GetOpenFilenameの章を読んだ方なら、そう思っているかもしれません。

たしかに、あの子(GetOpenFilename)は手軽だけど、自由度がちょっと低いんですよね。

ここで登場するのが、FileDialogさんです。

彼(彼女?)は、ファイルも、フォルダも、保存先までも選ばせてくれる懐の深い存在。

一見ちょっと書き方が長くて「難しそう…」と敬遠されがちですが、一度付き合ってみるとその魅力に気づくはずです。

FileDialogの基本構文(ファイル選択編)

Dim fd As FileDialog
Dim 選択結果 As String

Set fd = Application.FileDialog(msoFileDialogFilePicker)

With fd
    .Title = "ファイルを選んでください"
    .Filters.Clear
    .Filters.Add "Excelファイル", "*.xlsx; *.xlsm"
    .AllowMultiSelect = False
    
    If .Show = -1 Then ' -1 は「OK」が押されたとき
        選択結果 = .SelectedItems(1)
        MsgBox "選んだファイル:" & 選択結果
    Else
        MsgBox "キャンセルされました"
    End If
End With

フォルダを選ぶFileDialog(FolderPicker)

Set fd = Application.FileDialog(msoFileDialogFolderPicker)

msoFileDialogFolderPickerに変更するだけで、フォルダ選択専用のダイアログになります。

たとえば「このフォルダの中のファイルを全部処理したい」ときに超便利です。

保存先を選ぶFileDialog(SaveAs風)

Set fd = Application.FileDialog(msoFileDialogSaveAs)
  • .InitialFileName = “見積書_テンプレート.xlsx” のように、デフォルトのファイル名を設定できます。
  • 「どこに保存するか」をユーザーに選ばせたいときにおすすめです。

FileDialogでできること一覧(まとめ)

用途定数よく使うとき
ファイルを開くmsoFileDialogFilePicker 1つまたは複数ファイルを選びたいとき
フォルダを選ぶmsoFileDialogFolderPicker処理対象フォルダを選びたいとき
保存先を選ぶmsoFileDialogSaveAs上書き保存せず、新しいファイルに保存したいとき
ファイルを開く(Open)msoFileDialogOpenExcelの「開く」に近いUI

FileDialogの特長まとめ

  • 複数選択が可能(.AllowMultiSelect = True)
  • フィルタやタイトルなどを細かくカスタマイズできる
  • フォルダだけ・保存先だけも選べる万能型
  • 戻り値は .SelectedItems(1) 形式で扱える(配列風)

その反面、構文がちょっと長くなりやすいので、よく使う形はテンプレ化しておくのがおすすめです。

小まとめ:「ちょっと手間だけど、ちゃんと選べる」安心感

FileDialogは、VBA界隈では“ちょっと玄人っぽく見える”存在かもしれません。

でも実際は、「ユーザーにちゃんと選ばせる」=人に優しいマクロをつくるうえで、欠かせないパーツなんです。

次章では、GetOpenFilenameとFileDialogの使い分けと選び方を比較しながら整理していきます!

比較編:GetOpenFilenameとFileDialog、結局どっち使えばいいの?

ここまで、GetOpenFilename と FileDialog の基本的な使い方を紹介してきました。

でも、いざ自分のマクロに組み込もうとすると、ふと思うわけです。

で、どっちを使えば正解なんだっけ…?

ということでこの章では、「それぞれの特徴と違い」を一覧で整理しながら、実務のシーンに応じた使い分けのヒントをご紹介します!

比較一覧|構文・できること・向いている用途

比較項目GetOpenFilenameFileDialog(FilePicker等)
基本構文の短さ◎ シンプル△ 少し長めのWith構文
複数ファイル選択✕ 非対応◎ .AllowMultiSelect = True で対応可能
フォルダ選択 ✕ 不可◎ msoFileDialogFolderPicker が使える
保存先選択✕ 不可◎ msoFileDialogSaveAs で保存先指定可能
フィルタの柔軟性△ やや限定的(1種のみ)◎ .Filters.Add で複数種類を指定できる
戻り値の扱いやすさ◯ 1つの文字列(もしくはFalse)◯ .SelectedItems(1) で1件ずつ取得
初期表示フォルダ指定 ✕ 不可 ◎ .InitialFileName などで初期パスを指定可能
実装のハードル◎ 初心者向け△ 柔軟だが少し構文が長い
向いている場面 「1ファイルだけ選ばせたいとき」「柔軟に選ばせたい」「見た目も整えたいとき」

結論:選び方の目安

とりあえず1つのファイルを選ばせたいだけ → GetOpenFilename

  • 書き方がシンプルなので、とにかく素早く・最低限の実装をしたい場面に◎
  • Dir関数やファイル処理と組み合わせやすい

複数選択、フォルダ選択、保存先選択などもしたい → FileDialog

  • 「ユーザーに柔軟に選ばせたい」「UIを丁寧に作りたい」場面では断然こちら
  • .Title や .InitialFileName を使えば、業務用マクロっぽい見た目に仕上がる

おすすめポイント

個人的には、「まずはGetOpenFilenameでスモールスタート → 必要が出たらFileDialogに切り替える」くらいの感覚がちょうどいいと思っています。

FileDialogは慣れると楽しいですし、「このマクロ…ちょっとプロっぽくない?」とニヤニヤできる日が来るかも。

次章では、実際に選んだファイルを開いて処理するサンプルをご紹介していきます。

さっそくGetOpenFilenameやFileDialogを組み込んでみましょう!

応用例①:選んだファイルを開いて処理する

ファイル選択ダイアログの魅力は、「手でパスを貼り付けなくていい!」だけではありません。

ユーザーにファイルを選ばせて、その後の処理をマクロに任せるという流れが実現できるんです。

この章では、選んだExcelファイルを開いて、特定のセルに値を書き込む簡単なサンプルを紹介します。

やりたいことの流れ

  • ファイル選択ダイアログを表示して、ユーザーに1ファイルを選ばせる
  • 選ばれたファイルを開く
  • 1枚目のシートのA1セルに「処理済」と書き込む
  • ファイルを保存して閉じる

サンプルコード:GetOpenFilenameを使う場合

Sub 選んだファイルを開いて処理する()

    Dim filePath As Variant
    Dim wb As Workbook

    ' ▼ ファイル選択ダイアログを表示(1つ選択)
    filePath = Application.GetOpenFilename("Excelファイル,*.xlsx")

    If filePath = False Then
        MsgBox "キャンセルされました"
        Exit Sub
    End If

    ' ▼ ファイルを開く
    Set wb = Workbooks.Open(filePath)

    ' ▼ 1枚目のシートに処理
    With wb.Sheets(1)
        .Range("A1").Value = "処理済"
    End With

    ' ▼ 保存して閉じる
    wb.Close SaveChanges:=True

    MsgBox "ファイルを処理しました!"

End Sub

ポイントと補足

  • キャンセル対策:filePath = False になったときはしっかり Exit Sub
  • .Sheets(1) とすることでシート名に左右されず1枚目に処理可能
  • 上書き保存が不安なときは、SaveChanges:=Falseにしたり、SaveAsで別名保存にしてもOKです

FileDialogを使った書き方(比較として)

Dim fd As FileDialog
Dim 選んだパス As String

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
    .Title = "処理するExcelファイルを選んでください"
    .Filters.Clear
    .Filters.Add "Excelファイル", "*.xlsx; *.xlsm"
    .AllowMultiSelect = False

    If .Show = -1 Then
        選んだパス = .SelectedItems(1)
        Set wb = Workbooks.Open(選んだパス)
        '(以下同じ処理)
    Else
        MsgBox "キャンセルされました"
        Exit Sub
    End If
End With

構文はやや長くなりますが、見た目の柔らかさやカスタマイズ性は抜群です。

実務での活用例アイディア

  • 月次報告ファイルの処理:値の確認やフラグ書き込み
  • 提出されたフォーマットのチェック:特定セルの内容確認&警告
  • 複数ファイルから共通項目を抜き出すループ処理の導入前段階

小まとめ:「選ばせて処理」の組み合わせが、マクロの幅を広げる

たった1つファイルを選ばせるだけで、マクロは“受け身”から“対話的”なツールへと変わります。

今回は1つのファイルに対して処理を行いましたが、次章では、フォルダ内のファイルに一括で処理をかける例をご紹介します!

応用例②:選んだフォルダ内のすべてのExcelファイルに処理をかける

さて、ここからは「選んだファイル1つを処理する」から、もう一歩ステップアップ。

今度は選んだフォルダ内にあるExcelファイルすべてに、同じ処理をまとめてかけるマクロを作ってみましょう。

これは、たとえば…

  • 毎月届くExcelレポートを一括でチェックしたい
  • フォルダに溜まった帳票を自動で更新したい
  • 全ファイルに共通メッセージや印を入れて処理済みにしたい

──そんなときにめちゃくちゃ役立ちます!

やりたいことの流れ

  • フォルダ選択ダイアログを表示して、対象フォルダを選んでもらう
  • フォルダ内の .xlsx ファイルを1つずつ取得(Dir関数)
  • ファイルを開いて1シート目に「処理済」と書き込む
  • 保存して閉じる
  • 次のファイルへ…ループ!

サンプルコード:FileDialog+Dir関数の組み合わせ

Sub フォルダ内全ファイルを処理する()

    Dim fd As FileDialog
    Dim folderPath As String
    Dim fileName As String
    Dim wb As Workbook

    ' ▼ フォルダ選択ダイアログを表示
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    With fd
        .Title = "処理対象のフォルダを選んでください"
        If .Show = -1 Then
            folderPath = .SelectedItems(1)
        Else
            MsgBox "キャンセルされました"
            Exit Sub
        End If
    End With

    ' ▼ フォルダパス末尾に \ をつける
    If Right(folderPath, 1) <> "\" Then
        folderPath = folderPath & "\"
    End If

    ' ▼ Excelファイルを順に取得して処理
    fileName = Dir(folderPath & "*.xlsx")
    
    Do While fileName <> ""

        Set wb = Workbooks.Open(folderPath & fileName)
        
        With wb.Sheets(1)
            .Range("A1").Value = "処理済"
        End With
        
        wb.Close SaveChanges:=True
        
        fileName = Dir ' 次のファイルへ
    Loop

    MsgBox "すべてのファイルの処理が完了しました!"

End Sub

補足ポイント

  • Dir関数で拡張子フィルタをかけて.xlsxファイルだけ対象にしています
  • 1シート目を処理しているため、シート名が違ってもOK
  • .xlsmも含めたい場合は、*.xlsx;*.xlsmのように変更を(ただしDirではセミコロン区切り不可なので注意)

応用アイディア

  • ファイルを開く前に「処理済」かどうかを判定してスキップ
  • 日付やユーザー名をA1に自動書き込みしてログとして残す
  • 処理エラー時にログファイルにファイル名を記録しておく(信頼感アップ)

実務での活用例

シーン具体的な使い方例
勤怠データの集計前処理各社員の提出ファイルに印を入れる
顧客提出物の検品不備のチェック用メッセージを1セルに記録
同一フォーマット帳票の一括更新会社名・フッター情報などを全ファイルに追加

小まとめ:手作業ゼロで、処理ミスもゼロへ

ここまで来ればもう「どこに処理すればいいかわからない…」なんて不安とは無縁。

フォルダをポチっと選ぶだけで、あなたの代わりにマクロが淡々と、でも確実に仕事をこなしてくれます。

次章では、ここまで学んできた内容のまとめと、ファイル選択ダイアログ導入の効果を振り返っていきましょう!

まとめ:パスを手で打つ時代に、さようなら

VBAを始めた頃、ファイルを開くマクロといえば InputBox でフルパスを手入力。

毎回ファイル名をコピペし、拡張子を付け忘れてエラーになり、 「Excelの神様…お願いだから動いて…」と祈りながら[実行]ボタンを押していた方も多いのではないでしょうか。

私自身、そんな時代を経てきました。

でも、GetOpenFilenameやFileDialogと出会ってからは世界が変わりました。

“選ばせる”だけでコードが強くなる

  • パスミスによるエラーが減る
  • 初心者でも使いやすくなる
  • ファイル選択や保存先の自由度が上がる

たったひとつ「ダイアログ」を加えるだけで、マクロが実務にちゃんと耐えるツールに変身するんです。

GetOpenFilename vs FileDialog、どちらも正解

  • とりあえずシンプルに選びたいなら GetOpenFilename
  • 柔軟さ・見た目・機能性を求めるなら FileDialog

どちらにも良さがあり、目的に応じて選べばOK。

大事なのは、「こうしたい」をマクロに託す手段を知っていることです。

最後に:ダイアログは、マクロの“やさしさ”の入り口

この記事を通して少しでも「マクロって、やさしくできるんだ」と感じてもらえたら嬉しいです。

「選ばせてあげる」というほんの小さな工夫が、 使う人にとっても、自分自身にとっても、ストレスの少ないマクロ体験につながっていきます。

decopon
decopon

「ファイルを選ぶだけなのに、なんでこんなに難しいの…?」 昔の私はそう思いながら、ひたすらパスをコピペし、InputBoxと格闘していました。

でも、ほんの少し書き方を変えて、ファイルやフォルダを“選ばせてみる”ようにしただけで、 マクロはぐんと快適になり、作業も楽になって、ちょっとだけ自分に自信がつきました。

今回の記事が、今まさに同じような悩みに直面している誰かの手助けになれたなら、これ以上の喜びはありません。

「手入力からの卒業」――その第一歩が、あなたのマクロライフをもっとやさしく、もっとたのしくしてくれますように。

コメント

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