大体でIT
大体でIT
2020/7/25
Excel VBAを使ってファイルパスを取得する方法の5つをまとめました。使いたい方法に応じて、「ThisWorkbook.Path」や「Dir関数」、「ワイルドカード」、「ダイアログ」でファイルのフルパスを取得できます。ファイルパスを取得する方法をマスタして、実務で活用していきましょう。
こちらの記事ではファイルパスを取得する方法について、一番簡単なフルパスで指定する方法から、Dir関数やワイルドカード、選択ダイアログを使う方法をご紹介します。
Excel VBAでファイルを開いたりデータを取得したりするファイルの操作は、「ファイルパス」を取得する必要がありますので、ファイル操作する際に使える情報です。
やりたい作業に応じてファイルパスを取得する方法を選ぶことができます。
VIDEO
やりたいことは、VBAでファイルパスを取得したい、ということです。
「TEST」というフォルダの中にある、「ファイル1.xlsx」のファイルを取得してみます。
ファイルパスを取得したい
直接ファイルパスを指定する、という方法でファイルパスを取得してみます。
取得したいファイルのフルパスを使って、ファイルパスを取得する、という方法です。
フルパスを指定する方法
Sub TEST1()
'ファイルのフルパスを指定します。
Dim FilePath
FilePath = "C:\Users\User\Desktop\TEST\ファイル1.xlsx"
'ファイルを開く
Workbooks.Open FilePath
End Sub
フルパスを指定する
取得したいファイルの「フルパス」を取得して、VBAコードで使うという手順です。
「"C:\Users\User\Desktop\TEST\ファイル1.xlsx"」というように、フルパスを指定します。
VBAコードを実行
VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました。
フルパスを取得するには、「Shift」を押しながら、ファイルを「右クリック」します。
「Shift」+「右クリック」
「パスのコピー」を選択
フルパスを取得できた
現在フォルダから指定する、という方法でやってみます。
「ThisWorkbook.Path」を使って、現在フォルダからファイルパスを取得する、という方法です。
現在フォルダからファイルパスを取得
Sub TEST2()
Dim FilePath
'現在のフォルダからファイルパスを指定
FilePath = ThisWorkbook.Path & "\TEST\ファイル1.xlsx"
'ファイルを開く
Workbooks.Open FilePath
End Sub
「ThisWrkbook.Path」を使うところがポイントです。
現在フォルダからファイルパスを指定
現在フォルダは「ThisWorkbook.Path」を使うと取得することができます。
「TEST」と「ファイル1.xlsx」をつなげて、ファイルパスを作成します。
VBAコードを実行
VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました。
上の階層を変更しても取得できる、というのがポイントです。
上の階層を変更してみる
マクロファイルと開きたいファイルを、新しいフォルダに移動します。
こんな感じで、新しいフォルダに、マクロファイルと開きたいファイルを移動できました。
同じVBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができます。
同じVBAコードを実行
こんな感じで、上の階層が変わったとしても、「現在フォルダ」からフォルダパスを指定しておくと、柔軟に対応することができます。
現在フォルダと「Dir関数」を使って、ファイルパスを取得してみます。
ThisWorkbook.Path、Dir関数、ワイルドカード「*」を使う
ThisWorkbook.Path、Dir関数、ワイルドカード「*」を使って、ファイルパスを取得する、という方法です。
現在フォルダと「Dir関数」を使う
Sub TEST3()
'探索するフォルダを指定します。
Dim Path, FileName, FilePath
'フォルダパスを指定します。
Path = ThisWorkbook.Path & "\TEST\"
'ファイル名を取得
FileName = Dir(Path & "*.xlsx")
'ファイルのフルパスを指定
FilePath = Path & FileName
'ファイルを開く
Workbooks.Open FilePath
End Sub
フォルダパスの作成
現在フォルダを「ThisWorkbook.Path」で取得します。
「TEST」のフォルダと組み合わせて、「フォルダパス」を作成します。
「ファイル名」を取得
作成した「フォルダパス」から「Dir関数」を使って、一つのエクセルファイルの「ファイル名」を取得します。
ファイルパスを作成
作成した「フォルダパス」と「ファイル名」を結合させて、「ファイルパス」を作成します。
VBAコードを実行
VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました。
「Dir関数」を使っているので、ファイル名が変更された場合でも、ファイルパスを取得することができます。
ファイル名を変更
同じVBAコードを実行
ファイル名が変更されても、同じVBAコードでファイルパスを取得することができました。
次は、ファイル選択用ダイアログを使う、という方法です。
ファイル選択用ダイアログを使うには、「GetOpenFilename」を使います。
ファイル選択用ダイアログを使う
ファイル選択用ダイアログを使って、ファイルパスを取得する、という方法です。
Sub TEST4()
Dim FilePath
'カレントディレクトリを設定します。
With CreateObject("WScript.Shell")
.CurrentDirectory = ThisWorkbook.Path
End With
'ファイルを指定するダイアログを表示します。
FilePath = Application.GetOpenFilename("Microsoft Excelブック,*.xlsx?")
'設定しない場合は、終了します。
If FilePath = False Then Exit Sub
'ファイルを開く
Workbooks.Open FilePath
End Sub
カレントディレクトリを設定
「.CurrentDirectory」で「最初に開くフォルダ」を設定することができます。
今回は、「ThisWorkbook.Path」で「現在のフォルダ」を設定しています。
ファイル選択用のダイアログを表示
「ファイル選択用」のダイアログを表示するには、「GetOpenFilename」を使います。
「"Microsoft Excelブック,*.xlsx?"」というように、拡張子を指定することもできます。
選択されなかった場合は終了
ファイル選択用ダイアログで選択されなかった場合は、「FilePath」が「False」となります。
選択された場合はファイルを開く
選択された場合は、「Workbooks.Open」でファイルを開きます。
VBAコードを実行してみる
VBAコードを実行すると、ファイル選択用のダイアログが表示されます。
ファイルパスを取得したいファイルを選択して、「開く」をクリックします。
「キャンセル」を選択するとマクロを終了させることができます。
ダイアログで「キャンセル」を選択
ファイル選択用ダイアログを閉じて、マクロを終了させることができます。
マクロを終了できた
ファイル選択用ダイアログを閉じて、マクロを終了させることができました。
最後の方法は、フォルダ選択用ダイアログ+「Dir関数」を使う、という方法です。
FileDialog、Dir関数、ワイルドカード「*」を使う
FileDialog、Dir関数、ワイルドカード「*」を使って、ファイルパスを取得します。
フォルダ選択用ダイアログと「Dir関数」を使う
Sub TEST5()
Dim Path, FileName, FilePath
'任意フォルダを設定するダイアログを表示します。
With Application.FileDialog(4)
'カレントディレクトリを指定します。
.InitialFileName = ThisWorkbook.Path
'設定しなかったら終了します。
If .Show = False Then Exit Sub
'設定したフォルダを表示します。
Path = .SelectedItems(1)
End With
'ファイル名を取得します。
FileName = Dir(Path & "\*.xlsx")
'ファイルのフルパスを設定します。
FilePath = Path & "\" & FileName
'ファイルを開く
Workbooks.Open FilePath
End Sub
「フォルダ」選択用ダイアログを表示
「フォルダ」選択用ダイアログを表示するには、「FileDialog(4)」を使います。
最初に開くフォルダを指定
最初に開くフォルダを指定するには、「.InitialFileName」を使います。
今回は、「Thisworkbook.Path」で「現在フォルダ」を指定いています。
選択されなかったら終了
フォルダが選択されなかったら、「.Show」が「False」となりますので、マクロを終了させます。
選択されたフォルダパスを変数に代入
フォルダが選択されたら「.SelectedItems(1)」にフォルダパスが保存されますので、変数に代入します。
フォルダの中のファイル名を取得
「Dir関数」を使って、フォルダの名からエクセルであるファイルの「ファイル名」を一つ取得します。
ファイルパスを作成
取得した「フォルダパス」と「ファイル名」を結合させて、ファイルパスを作成します。
ファイルを開く
VBAコードを実行してみる
VBAコードを実行すると、「フォルダ選択用ダイアログ」が表示されます。
取得したいファイルが保存されている「フォルダを選択」して、OKをクリックします。
「ファイル1.xlsx」のファイルを開くことができます。
「ファイル1.xlsx」のファイルを開くことができました。
「Dir関数」を使っているので、ファイル名を変更した場合でも、ファイルパスを取得することができます。
ファイル名を変更
同じVBAコードを実行
フォルダ選択用ダイアログが表示されるので、「TEST」のフォルダを選択します。
TESTの中のファイルから、ファイルパスを取得することができます。
ダイアログを表示して、「キャンセル」を選択してみます。
ダイアログを「キャンセル」で終了させる
ダイアログを閉じて、マクロを終了させることができます。
「キャンセル」でマクロを終了できた
「キャンセル」をクリックして、ダイアログを閉じて、マクロを終了させることができました。
Excel VBAでファイルパスを取得する5つの方法について説明しました。
最初に説明した「直接フルパスを指定」してファイルパスを取得する方法は、簡単ですけど応用が利かないものになります。
あとに説明していくものは、少しコードが複雑になりますけど、応用が利くものというように説明しました。
よく使う方法は、「ThisWorkbook.Path」を使ったファイルパスの取得です。簡単なコードを作る場合に使える方法です。
しっかりExcel VBAコードを作りこんで、応用が利くものを作りたいといった場合は、「Dir関数+ワイルドカード」を使った方法や、「ファイル選択のダイアログ」を使った方法で、ファイルパスを取得していきましょう。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。