マクロでファイル名を取得する方法を解説します。
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”と入力したとします。
この場合のプログラムの流れは以下の通りです。
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でファイルを選び、=で変更後の名前を入れましょう。
このようにファイル名を変更可能です。
まとめ
今回はファイル名を取得するプログラムを紹介しました。
ファイルを開くプログラムとうまく組み合わせたいですね。
コメント