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

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

【筆者プロフィール】

・プログラミング未経験からVBAとPythonを独学

・業務自動化や機械学習を仕事に取り入れた

こんな私が書いた当記事は以下の人におススメです。

・VBAで業務効率を上げたい
・非IT社員だけどプログラミングを武器にしたい
・初心者や未経験者にもわかりやすい解説がいい

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

Excelマクロでファイル名を取得する方法まとめ

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

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”です。

HTOM

ユーザー名は人によって違いますよ。

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マクロでファイルを開く方法まとめをご覧ください。

おススメ書籍

こんな人におススメ:VBAの基礎を理解している人。平均レベルの一歩上を行きたい人。

こんな人におススメ:プログラミング初学者。実務への応用よりも基礎知識を求めている人。

VBA
スポンサーリンク
HTOMblog

コメント

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