【VBA】Excelマクロでファイル名を取得する方法

VBA
Image by Goumbik from Pixabay
スポンサーリンク

マクロでファイル名を取得する方法を解説します。

Sub test()

file = Dir("C:\Users\HTOM\Desktop\BookFolder" & "\" & "*")

Do While file <> ""
    MsgBox file
    file = Dir()
Loop

End Sub

いろいろな方法があるので、都合のいいものを使ってください。

もしファイル名を取得する目的が“ファイルを開きたいから”“ファイルをコピーしたいから”なら、以下の記事をご覧ください。

プログラム実行ファイル自身の名前を取得する

Sub test()

MsgBox ThisWorkbook.Name

End Sub

ThisWorkbookはプログラムを書いた実行ファイル自身のことです。

ファイルを指定できたらNameでファイル名を取り出しましょう。

実行すれば拡張子も含めてファイル名が表示されるはずです。

別ファイルの名前を取り出す

“Book1.xlsx”というファイルを開いているとします。

Sub test()

MsgBox Workbooks("Book1.xlsx").Name

End Sub

Workbooks(“ファイル名”)で指定できます。

他にもActiveWorkbookでアクティブブックの名前を確認できます。

Sub test()

MsgBox ActiveWorkbook.Name

End Sub

アクティブブックとは編集中のファイル(ブック)のことです。

アクティブブックはプログラムの進行に伴ってコロコロ変わるので注意しましょう。

Sub test()

Workbooks("Book1.xlsx").Activate
Cells(1, 1) = "Book1"
MsgBox ActiveWorkbook.Name

Workbooks("VBA.xlsm").Activate
MsgBox ActiveWorkbook.Name

End Sub

ActiveWorkbook.Nameでどのファイルが現在アクティブなのか把握できると、コピペなど別ファイルを跨って動作するプログラムを組む際に便利ですよ。

ファイル指定方法についてはExcelマクロでセル,シート,ファイルを指定する方法をご覧ください。

開いている全てのファイルの名前を取得する

Sub test()

For Each wb In Workbooks
    MsgBox wb.Name
Next wb

End Sub

開いているファイルの名前をすべて取得したい時はFor eachを使いましょう。

変数wbがそれぞれ開いているファイルに対応します。

名前を取り出したいなら.Nameを足してあげればOKです。

Dirでファイル名を取得する

Sub test()

Filename = Dir("C:\Users\HTOM\Desktop\Book1.xlsx")
MsgBox Filename

End Sub

Dirは()に入れたパスのファイルが存在するかを確認する関数です。

例えばデスクトップに”Book1.xlsx”があるとします。

デスクトップの”Book1.xlsx”のパスは”C:\Users\[ユーザー名]\Desktop\Book1.xlsx”です。

Dir()はそのファイルが存在する場合はファイル名を、存在しない場合はカラの文字””を返します。

これで変数Filenameとしてファイル名を手に入れることができますよ。

Dirでフォルダ内にある全ファイル名を取得する

例えばデスクトップに”BookFolder”というフォルダがあるとします。

このフォルダの中にある計4つのファイル名を取得しましょう。

Sub test()

file = Dir("C:\Users\HTOM\Desktop\BookFolder" & "\" & "*")

Do While file <> ""
    MsgBox file
    file = Dir()
Loop

End Sub

ここで大事なのがワイルドカード(*)で、これは任意の文字を指します。

任意の文字になるので”Book1.xlsx”でも”Book2.xlsx”でもOKです。

変数fileにDir()の戻り値を入れておきましょう。

これをloop文の繰り返し処理にかけます。

最初はfile = “Book1.xlsx”です。

次のファイルにアクセスしたい場合はDir()とだけ書きます。

もし該当ファイルがなくなればカラの文字””になるので、file <> “”を満たさなくなってループ終了です。

これで”BookFolder”にある全ファイルの名前を取り出せます。

Dirとワイルドカードで任意のファイルを開く

例えばデスクトップにある”Data”フォルダに以下のファイルが入っているとします。

このようにファイル名にサンプル名が入っているが統一性がない場合です。

InputBoxでサンプル名だけ入力すれば後は任意の名前で開けるようにしましょう。

Sub test()

inputName = InputBox("開きたいファイル名を入力 ※拡張子不要")
folderPath = "C:\Users\HTOM\Desktop\Data"
Filename = Dir(folderPath & "\" & inputName & "*")

Workbooks.Open (folderPath & "\" & Filename)

End Sub

例えばInputBoxで”sampleA”と入力したとします。

この場合のプログラムの流れは以下の通りです。

①inputNameが”sampleA”になる
②Dirで”sampleA”を含む名前のファイルを見つける
③”sampleA_0101.xlsx”がヒットして変数Filenameに入る
④folderPathとFilenameを使ってヒットしたファイルが開かれる

この方法ならサンプル名が被らない限り好きなファイル名で保存し開くことができますよ。

ファイルを開く方法については以下の記事で解説しています。

FileSystemObject

FileSystemobjectを使ってファイル名の取得や変更ができます。

インスタンスを作成する

Sub test()

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

End Sub

まずはFileSystemObjectを呼び出しましょう。

CreateObject(“Scripting.FileSystemObject”)で使えるようになります。

変数FSOとして保存しておきました。

ファイル名を取得する

Sub test()

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each File In FSO.getfolder("C:\Users\HTOM\Desktop\BookFolder").Files
    MsgBox File.Name
Next File

End Sub

.getfolder(“フォルダのパス”).Filesで()の中に入れたファイルの各フォルダにアクセスできます。

For Eachで繰り返し処理を行い.Nameでファイル名を取り出しましょう。

ファイル名を変更する

例えばデスクトップにある”Book1.xlsx”ファイルの名前を変更したいとします。

Sub test()

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.getfile("C:\Users\HTOM\Desktop\Book1.xlsx").Name = "Changed.xlsx"

End Sub

FSO.getfile(“ファイルのパス”).Nameでファイルを選び、=で変更後の名前を入れましょう。

このようにファイル名を変更可能です。

まとめ:ファイル名を取得するプログラムを紹介

今回はファイル名を取得するプログラムを紹介しました。

最終的にファイルを開きたい場合はExcelマクロでファイルを開く方法まとめをご覧ください。

コメント

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