大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAを使ってファイルパスを取得する方法の5つをまとめました。使いたい方法に応じて、「ThisWorkbook.Path」や「Dir関数」、「ワイルドカード」、「ダイアログ」でファイルのフルパスを取得できます。ファイルパスを取得する方法をマスタして、実務で活用していきましょう。

はじめに

こちらの記事ではファイルパスを取得する方法について、一番簡単なフルパスで指定する方法から、Dir関数やワイルドカード、選択ダイアログを使う方法をご紹介します。

Excel VBAでファイルを開いたりデータを取得したりするファイルの操作は、「ファイルパス」を取得する必要がありますので、ファイル操作する際に使える情報です。

この記事を読むメリット

  • やりたい作業に応じてファイルパスを取得する方法を選ぶことができます。

本記事の内容を動画でまとめています

目次から見たい項目へ移動すると便利ですよ。

目次

やりたいこと

やりたいことは、VBAでファイルパスを取得したい、ということです。

ファイルパスを取得したい

「TEST」というフォルダの中にある、「ファイル1.xlsx」のファイルを取得してみます。

ファイルパスを取得したい

VBAでファイルパスを取得したい、ということです

では、それぞれの方法でやってみます。

直接ファイルパスを指定する

直接ファイルパスを指定する、という方法でファイルパスを取得してみます。

フルパスを指定してファイルパスを取得

取得したいファイルのフルパスを使って、ファイルパスを取得する、という方法です。

フルパスを指定する方法

取得したいファイルのフルパスを使って、ファイルパスを取得する、という方法です

一番簡単な方法になります。

VBAコード

VBAコードでいうとこんな感じになります。

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コードを実行してみます。

VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました

VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました。

フルパスを取得する方法

フルパスを取得するには、「Shift」を押しながら、ファイルを「右クリック」します。

「Shift」+「右クリック」

「Shift」を押しながら、ファイルを「右クリック」します

「パスのコピー」を選択します。

「パスのコピー」を選択

「パスのコピー」を選択します

ファイルのフルパスを取得することができます。

フルパスを取得できた

ファイルのフルパスを取得することができました

ファイルのフルパスを取得することができました。

現在フォルダから指定する

現在フォルダから指定する、という方法でやってみます。

ThisWorkbook.Pathを使う

「ThisWorkbook.Path」を使って、現在フォルダからファイルパスを取得する、という方法です。

現在フォルダからファイルパスを取得

現在フォルダからファイルパスを取得する、という方法です

では、VBAコードをみてみます。

VBAコード

VBAコードは、こんな感じになります。

Sub TEST2()
    
    Dim FilePath
    
    '現在のフォルダからファイルパスを指定
    FilePath = ThisWorkbook.Path & "\TEST\ファイル1.xlsx"
    
    'ファイルを開く
    Workbooks.Open FilePath
    
End Sub

「ThisWrkbook.Path」を使うところがポイントです。

現在フォルダからファイルパスを指定

現在フォルダは「ThisWorkbook.Path」を使うと取得することができます。

「TEST」と「ファイル1.xlsx」をつなげて、ファイルパスを作成します。

VBAコードを実行

VBAコードを実行してみます。

VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました

VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました。

上の階層を変更しても取得できる

上の階層を変更しても取得できる、というのがポイントです。

上の階層を変更してみる

新しいフォルダを作成します。

新しいフォルダを作成します

マクロファイルと開きたいファイルを、新しいフォルダに移動します。

マクロファイルと開きたいファイルを、新しいフォルダに移動します

こんな感じで、新しいフォルダに、マクロファイルと開きたいファイルを移動できました。

新しいフォルダに、マクロファイルと開きたいファイルを移動できました

同じVBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができます。

同じVBAコードを実行

同じVBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました

こんな感じで、上の階層が変わったとしても、「現在フォルダ」からフォルダパスを指定しておくと、柔軟に対応することができます。

現在フォルダと「Dir関数」を使う

現在フォルダと「Dir関数」を使って、ファイルパスを取得してみます。

ThisWorkbook.Path、Dir関数、ワイルドカード「*」を使う

ThisWorkbook.Path、Dir関数、ワイルドカード「*」を使って、ファイルパスを取得する、という方法です。

現在フォルダと「Dir関数」を使う

現在のフォルダと「Dir関数」を使って、ファイルパスを取得する、という方法です

では、VBAコードをみてみます。

VBAコード

VBAコードは、こんな感じになります。

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コードを実行

VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました

VBAコードを実行すると、「ファイル1.xlsx」のファイルを開くことができました。

ファイル名を変更してみる

「Dir関数」を使っているので、ファイル名が変更された場合でも、ファイルパスを取得することができます。

ファイル名を変更してみます。

ファイル名を変更

ファイル名を変更してみます

同じVBAコードを実行してみます。

同じVBAコードを実行

ファイル名が変更されても、同じVBAコードでファイルパスを取得することができています

ファイル名が変更されても、同じVBAコードでファイルパスを取得することができました。

ファイル選択用ダイアログを使う

次は、ファイル選択用ダイアログを使う、という方法です。

GetOpenFilenameを使う

ファイル選択用ダイアログを使うには、「GetOpenFilename」を使います。

ファイル選択用ダイアログを使う

ファイル選択用ダイアログを使って、ファイルパスを取得する、という方法です

ファイル選択用ダイアログを使って、ファイルパスを取得する、という方法です。

VBAコード

VBAコードは、次のようになります。

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コードを実行してみる

VBAコードを実行すると、ファイル選択用のダイアログが表示されます。

VBAコードを実行すると、ファイル選択用のダイアログが表示されます

ファイルパスを取得したいファイルを選択して、「開く」をクリックします。

ファイルパスを取得したいファイルを選択して、「開く」をクリックします

選択したファイルを表示することができます。

選択したファイルを表示することができました

選択したファイルを表示することができました。

「キャンセル」でマクロを終了できる

「キャンセル」を選択するとマクロを終了させることができます。

ダイアログで「キャンセル」を選択

ファイル選択用ダイアログは、「キャンセル」を選択するとマクロを終了させることができます

ファイル選択用ダイアログを閉じて、マクロを終了させることができます。

マクロを終了できた

ファイル選択用ダイアログを閉じて、マクロを終了させることができました

ファイル選択用ダイアログを閉じて、マクロを終了させることができました。

フォルダ選択用ダイアログ+「Dir関数」を使う

最後の方法は、フォルダ選択用ダイアログ+「Dir関数」を使う、という方法です。

FileDialog、Dir関数、ワイルドカード「*」を使う

FileDialog、Dir関数、ワイルドカード「*」を使って、ファイルパスを取得します。

イメージは、次のようになります。

フォルダ選択用ダイアログと「Dir関数」を使う

フォルダ選択用ダイアログと「Dir関数」を使って、ファイルパスを取得する、という方法です

では、VBAコードをみてみます。

VBAコード

VBAコードをは、次のようになります。

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コードを実行してみる

VBAコードを実行すると、「フォルダ選択用ダイアログ」が表示されます。

VBAコードを実行すると、「フォルダ選択用ダイアログ」を表示することができます

取得したいファイルが保存されている「フォルダを選択」して、OKをクリックします。

「フォルダを選択」して、OKをクリックします

「ファイル1.xlsx」のファイルを開くことができます。

「ファイル1.xlsx」のファイルを開くことができました

「ファイル1.xlsx」のファイルを開くことができました。

ファイル名を変更してみる

「Dir関数」を使っているので、ファイル名を変更した場合でも、ファイルパスを取得することができます。

ファイル名を変更してみます。

ファイル名を変更

ファイル名を変更してみます

ファイル名を変更してみました。

同じVBAコードを実行してみます。

同じVBAコードを実行

フォルダ選択用ダイアログが表示されるので、「TEST」のフォルダを選択します。

VBAコードを実行して、フォルダ選択用ダイアログで、「TEST」というフォルダを選択して、OKをクリックします

TESTの中のファイルから、ファイルパスを取得することができます。

TESTの中のファイルを表示することができました

TESTの中のファイルを開くことができました。

「キャンセル」でマクロを終了できる

「キャンセル」で終了させることができます。

ダイアログを表示して、「キャンセル」を選択してみます。

ダイアログを「キャンセル」で終了させる

フォルダ選択用のダイアログは、「キャンセル」で終了させることができます

ダイアログを閉じて、マクロを終了させることができます。

「キャンセル」でマクロを終了できた

「キャンセル」をクリックして、ダイアログを閉じて、マクロを終了させることができました

「キャンセル」をクリックして、ダイアログを閉じて、マクロを終了させることができました。

おわりに

Excel VBAでファイルパスを取得する5つの方法について説明しました。

最初に説明した「直接フルパスを指定」してファイルパスを取得する方法は、簡単ですけど応用が利かないものになります。

あとに説明していくものは、少しコードが複雑になりますけど、応用が利くものというように説明しました。

よく使う方法は、「ThisWorkbook.Path」を使ったファイルパスの取得です。簡単なコードを作る場合に使える方法です。

しっかりExcel VBAコードを作りこんで、応用が利くものを作りたいといった場合は、「Dir関数+ワイルドカード」を使った方法や、「ファイル選択のダイアログ」を使った方法で、ファイルパスを取得していきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す