PR

【ExcelVBA】ダイアログから選択してファイルを開く方法(フォルダ初期値設定)

ExcelVBA-ダイアログから選択してファイルを開く-アイキャッチ ブックの操作

エクセルVBAでファイル選択ダイアログボックスを使用してファイルを開く処理について説明しています。

スポンサーリンク

ダイアログから選択してファイルを開く方法

GetOpenFilename関数を使用してファイルを選択します。

下の例では開く対象のファイルを「Excelファイル」で拡張子が「.xls」で始まるもの(すべてのエクセルファイルに対応)を指定しています。

TargetFileName = Application.GetOpenFilename(FileFilter:=”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

上のサンプルでは初期フォルダを指定していないので、実行するとダイアログボックスはの初期フォルダはドキュメントフォルダになっています。

ExcelVBA-ダイアログから選択してファイルを開く-フォルダ初期値指定なし
スポンサーリンク

ファイル選択ダイアログの初期フォルダを指定する方法

使用するフォルダが決まっている場合は、毎回ドキュメントフォルダから移動して選択するのは面倒なので、初期フォルダを指定しておくと便利です。

今回はサンプル用に「ファイルを選択して開く」というフォルダを用意してるのでこのフォルダを初期値に指定しています。

ExcelVBA-ダイアログから選択してファイルを開く-フォルダの状態

初期フォルダを指定する場合は、ダイアログを表示する前に「ChDir」でカレントディレクトリを移動しておくようにします。

ChDir “C:\Users\Owner\Desktop\learningpgm\VBA\ファイルを選択して開く”

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を選択して「開く」ボタンを押します。

ExcelVBA-ダイアログから選択してファイルを開く-ファイルBを選択

マクロ実行後にファイルBを開くとA1セルに「こんにちは」の文字が入力されていることが確認できました。

ExcelVBA-ダイアログから選択してファイルを開く-マクロ実行後のファイルBの状態
スポンサーリンク

選択するファイルの拡張子を指定する方法

ファイル選択ダイアログでは選択する対象のファイルの拡張子を指定することが可能です。

下の例ではマクロファイルの拡張子「.xlsm」を指定しています。

Application.GetOpenFilename(FileFilter:=”Excelファイル,*.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」のマクロブックだけが表示されました。

ExcelVBA-ダイアログから選択してファイルを開く-拡張子指定

開く対象をエクセルファイルではなくCSVファイルを指定したい場合は↓のように指定します。

Application.GetOpenFilename(FileFilter:=”CSVファイル,*.csv“)

スポンサーリンク

別のブックを開いて処理する関連記事

こちらの記事では別のブックをファイルパスを指定して開き転記する処理について説明しています。

スポンサーリンク

※コードのコピー利用について

・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。

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