スポンサーリンク

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

VBA

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

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でどのファイルが現在アクティブなのか把握できると、
コピペなど別ファイルを跨って動作するプログラムを組む際に便利です。

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

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でファイルを選び、=で変更後の名前を入れましょう。

ファイル名を変更した後の図

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

まとめ

今回はファイル名を取得するプログラムを紹介しました。
ファイルを開くプログラムとうまく組み合わせたいですね。

コメント

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