エクセルVBAでファイル選択ダイアログボックスを使用してファイルを開く処理について説明しています。
ダイアログから選択してファイルを開く方法
GetOpenFilename関数を使用してファイルを選択します。
下の例では開く対象のファイルを「Excelファイル」で拡張子が「.xls」で始まるもの(すべてのエクセルファイルに対応)を指定しています。
実務でマクロを作成するときにファイルを開いて終わることはあまりなくて、開いたファイルに何か処理をすることが多いです。
なので下のサンプルマクロでは選択されたファイルを開いて、1つ目のシートのA1セルに「こんにちは」と書いて閉じる、という処理にしています。
Sub Sample1()
Dim TargetFileName As Variant
Dim TargetFile As Workbook
'ファイル選択ダイアログを表示
'選択されたファイル名を変数に格納する
TargetFileName = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xls*")
'ファイル名が空の場合は処理を終了する
If TargetFileName = False Then Exit Sub
'ファイルを開く
Workbooks.Open TargetFileName
'開いたファイルを変数にセットする
Set TargetFile = ActiveWorkbook
'開いたファイルに「こんにちは」と書く
TargetFile.Worksheets(1).Range("A1").Value = "こんにちは"
'開いたファイルを閉じる(保存する)
TargetFile.Close SaveChanges:=True
'変数の初期化
Set TargetFile = Nothing
End Sub
上のサンプルでは初期フォルダを指定していないので、実行するとダイアログボックスはの初期フォルダはドキュメントフォルダになっています。
ファイル選択ダイアログの初期フォルダを指定する方法
使用するフォルダが決まっている場合は、毎回ドキュメントフォルダから移動して選択するのは面倒なので、初期フォルダを指定しておくと便利です。
今回はサンプル用に「ファイルを選択して開く」というフォルダを用意してるのでこのフォルダを初期値に指定しています。
初期フォルダを指定する場合は、ダイアログを表示する前に「ChDir」でカレントディレクトリを移動しておくようにします。
Sub Sample2()
Dim TargetFileName As Variant
Dim TargetFile As Workbook
'カレントフォルダ指定
ChDir "C:\Users\Owner\Desktop\learningpgm\VBA\ファイルを選択して開く"
'ファイル選択ダイアログを表示
'選択されたファイル名を変数に格納する
TargetFileName = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xls*")
'ファイル名が空の場合は処理を終了する
If TargetFileName = False Then Exit Sub
'ファイルを開く
Workbooks.Open TargetFileName
'開いたファイルを変数にセットする
Set TargetFile = ActiveWorkbook
'開いたファイルに「こんにちは」と書く
TargetFile.Worksheets(1).Range("A1").Value = "こんにちは"
'開いたファイルを閉じる(保存する)
TargetFile.Close SaveChanges:=True
'変数の初期化
Set TargetFile = Nothing
End Sub
上のマクロを実行すると指定したフォルダのダイアログが表示されました。
ファイルB.xlsxを選択して「開く」ボタンを押します。
マクロ実行後にファイルBを開くとA1セルに「こんにちは」の文字が入力されていることが確認できました。
選択するファイルの拡張子を指定する方法
ファイル選択ダイアログでは選択する対象のファイルの拡張子を指定することが可能です。
下の例ではマクロファイルの拡張子「.xlsm」を指定しています。
Sub Sample3()
Dim TargetFileName As Variant
Dim TargetFile As Workbook
'カレントフォルダ指定
ChDir "C:\Users\Owner\Desktop\learningpgm\VBA\ファイルを選択して開く"
'ファイル選択ダイアログを表示
'選択されたファイル名を変数に格納する
TargetFileName = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xlsm")
'ファイル名が空の場合は処理を終了する
If TargetFileName = False Then Exit Sub
'ファイルを開く
Workbooks.Open TargetFileName
'開いたファイルを変数にセットする
Set TargetFile = ActiveWorkbook
'開いたファイルに「こんにちは」と書く
TargetFile.Worksheets(1).Range("A1").Value = "こんにちは"
'開いたファイルを閉じる(保存する)
TargetFile.Close SaveChanges:=True
'変数の初期化
Set TargetFile = Nothing
End Sub
実行すると同じフォルダには.xlsxの拡張子「ファイルA」~「ファイルC」も置いてありますが、ダイアログでは拡張子が「.xlsm」のマクロブックだけが表示されました。
開く対象をエクセルファイルではなくCSVファイルを指定したい場合は↓のように指定します。
別のブックを開いて処理する関連記事
こちらの記事では別のブックをファイルパスを指定して開き転記する処理について説明しています。
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。