VBA入門
ファイルを開くダイアログ(GetOpenFilename)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-10-05

第74回.ファイルを開くダイアログ(GetOpenFilename)


VBAで開くファイルが、あらかじめ決められたフォルダに決められたファイル名で存在している場合は単純にOpenできますが、
都度ユーザーに開くファイルを選択してもらわなければならない場合もあります。


ユーザーに開くフイルを選択してもらうには、
ApplicationオブジェクトのGetOpenFilenameメソッドを使い、
[ファイルを開く] ダイアログボックスを表示させます。


GetOpenFilenameメソッド

Applicationオブジェクトのメソッドになります。
[ファイルを開く] ダイアログボックスを表示して、ユーザーにファイルを指定してもらいます。

Application.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

FileFilter ファイルの候補を指定する文字列 (ファイル フィルター文字列) を指定します。
FilterIndex 引数 FileFilter で指定したファイル フィルター文字列の中で、1 から何番目の値を既定値とするかを指定します。
この引数を省略するか、ファイル フィルター文字列の数より大きい数値を指定すると、最初のファイル フィルター文字列が既定値となります。
Title ダイアログ ボックスのタイトルを指定します。
この引数を省略すると "ファイルを開く" になります。
ButtonText Macintosh でのみ指定できます。
MultiSelect True を指定すると、複数のファイルを選択できます。
False を指定すると、1 つのファイルしか選択できません。
既定値は False です。

戻り値
バリアント型 (Variant)が戻ります。
選択したファイルのフルパスが文字列で戻ります。
ファイルを選択しなかった場合は、Falseが戻ります。

説明文だけでは理解しづらいと思われるFileFilterの指定文字列について説明します。

FileFilter
ファイル フィルター文字列とワイルドカードのペアを必要な数だけ指定します。
ファイル フィルター文字列とワイルドカードはコンマ (,) で区切り、各ペアもコンマで区切って指定します。

各ペアは、[ファイルの種類] ボックスのリストに表示されます。
1 つのファイル フィルター文字列に複数のワイルドカードを対応させるには、各ワイルドカードをセミコロン (;) で区切ります。

文章では理解しづらいでしょう、以下の使用例を参考にして下さい。


GetOpenFilenameの使用例

Application.GetOpenFilename(FileFilter:="Excel2003以前,*.xls,Excelファイル,*.xlsx,Excelマクロブック,*.xlsm")
Excelファイルの拡張子として、xls,xlsx,xlsmの3つを指定しています。

Application.GetOpenFilename(FileFilter:="Excelファイル,*.xls*,CSVファイル,*.csv")
エクセルファイルとして、拡張子が xls , xlsx , xlsm を全て指定するために、xls* としています。
また、2番目のフィルターとして、CSVファィルを指定しています。

GetOpenFilenameの実践例

Sub sample1()
  Dim FileName As Variant
  FileName = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xls*")
  If FileName = False Then
    Exit Sub
  End If
  Workbooks.Open FileName
End Sub

ダイアログでエクセルファイルを指定し、そのエクセルファイルを開いています。

Sub Sample2()
  Dim FileName As Variant
  FileName = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xls*", _
                        MultiSelect:=True)
  If Not IsArray(FileName) Then
    Exit Sub
  End If
  Dim i As Long
  Dim wb As Workbook
  For i = LBound(FileName) To UBound(FileName)
    Set wb = Workbooks.Open(FileName(i))
    ・・・
    wb.Close SaveChanges:=False
  Next i
End Sub

複数のエクセルファイルを指定して、順次処理しています。
MultiSelect:=True では、配列処理が必要になります。
配列については後々説明します。
第111回.静的配列
・配列とは ・静的配列と動的配列 ・配列の宣言 ・多次元配列 ・要素の下限の変更 ・配列について
第112回.動的配列(ReDim)
・ReDimステートメント ・要素数の変更について ・配列について


GetOpenFilenameの初期フォルダーの指定

ダイアログで初期表示されるフォルダは、カレントフォルダです。
これを変更する場合は、
ChDir フォルダ
これを事前に実行するようにしますが、少々面倒に感じます。

次々回で解説する、
FileDialog
こちらは、初期フォルダを指定できます。


GetOpenFilenameの最後に

マクロVBAで業務を自動化する場合は、
入力ファイルは、決められたフォルダに決められたファイル名を用意した方が望ましいでしょう。
「決められた」と言うのは「決め事があれば」ということであり、完全に固定名称である必要はありません。

例えば、
名称の一部に、処理日付をYYYYMMDD形式にした文字列が含まれている等であればVBAで自動処理可能です。

従って、GetOpenFilenameメソッドを使うのは、
決め事がない場合や、決め事があってもそれをVBAとして処理出来ないような場合に限って使用すると良いでしょう。




同じテーマ「マクロVBA入門」の記事

第72回.印刷プレビュー(PrintPreview)
第139回.エクスポート(PDF/XPS)
第73回.ページ設定(PageSetup,PageBreak)
第74回.ファイルを開くダイアログ(GetOpenFilename)
第75回.名前を付けて保存ダイアログ(GetSaveAsFilename)
第76回.ファイルダイアログ(FileDialog)
第77回.組み込みダイアログ(Dialogs,xlDialogPrint)
第78回.総合練習問題8
第79回.ファイル操作Ⅰ(Dir)
第80回.ファイル操作Ⅰ(その他)
第81回.総合練習問題9


新着記事NEW ・・・新着記事一覧を見る

第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ