ExcelのVBA(Visual Basic for Applications)を使って、ファイル名を取得する方法について解説します。
基本的なファイル名の取得方法
プログラム実行ファイル自身の名前を取得する
VBAで作成したマクロが保存されているExcelファイル(ワークブック)の名前を取得する基本的な方法です。ThisWorkbook.Name
というプロパティを使用します。
Sub GetThisWorkbookName()
MsgBox ThisWorkbook.Name
End Sub
このコードを実行すると、メッセージボックスに現在のワークブックの名前が表示されます。
別の開いているファイルの名前を取得する
特定の開いているExcelファイルの名前を取得する方法です。Workbooks("ファイル名").Name
というプロパティを使用します。
Sub GetSpecificWorkbookName()
MsgBox Workbooks("Sample.xlsx").Name
End Sub
このコードを実行すると、”Sample.xlsx”という名前のワークブックが開いている場合、その名前がメッセージボックスに表示されます。ただ、そのファイル名のワークブックが開かれていない場合はエラーが出るのでエラー処理などが必要となります。
アクティブなファイル(ブック)の名前を取得する
編集中のExcelファイル(アクティブブック)の名前を取得する方法です。ActiveWorkbook.Name
というプロパティを使用します。
Sub GetActiveWorkbookName()
MsgBox ActiveWorkbook.Name
End Sub
このコードを実行すると、現在編集中のワークブックの名前がメッセージボックスに表示されます。
応用テクニック
開いている全てのファイルの名前を取得する
複数のExcelファイルが開いている場合、それら全ての名前を一括で取得する方法です。For Each
ループとWorkbooks
コレクションを使用します。
Sub GetAllOpenWorkbooks()
Dim wb As Workbook
For Each wb In Workbooks
MsgBox wb.Name
Next wb
End Sub
このコードを実行すると、開いている全てのワークブックの名前が順番にメッセージボックスに表示されます。
Dir関数で特定のファイル名を取得する
Dir
関数を使用して、特定のディレクトリ(フォルダ)に存在するファイル名を取得する方法です。
Sub GetFileNameWithDir()
Dim Filename As String
Filename = Dir("C:\Path\To\Your\File.xlsx")
MsgBox Filename
End Sub
このコードを実行すると、指定したパスに存在するファイルの名前がメッセージボックスに表示されます。存在しない場合は、何も表示されません。
Dir関数とワイルドカードで任意のファイルを開く
Dir
関数とワイルドカード(*
)を組み合わせて、部分一致するファイル名でファイルを開く方法です。
Sub OpenFileWithWildcard()
Dim Filename As String
Filename = Dir("C:\Path\To\Your\Files\Sample*")
Workbooks.Open ("C:\Path\To\Your\Files\" & Filename)
End Sub
このコードを実行すると、”Sample”で始まる名前のファイルが開きます。
VBAでファイル名を取得に関するFAQ
Q:ThisWorkbook.Name
とActiveWorkbook.Name
の違いは何ですか?
A:ThisWorkbook.Name
は、マクロコードが格納されているワークブックの名前を返します。一方で、ActiveWorkbook.Name
は現在アクティブ(選択されている)なワークブックの名前を返します。この二つは、同じワークブックがアクティブな場合には同じ値を返しますが、異なるワークブックがアクティブな場合には異なる値を返します。
Q:Dir
関数でファイルが見つからない場合、どうなりますか?
A:Dir
関数で指定したパスにファイルが存在しない場合、関数は空の文字列(””)を返します。この情報を用いて、ファイルが存在するかどうかをプログラム内で判断することができます。
Q:Workbooks
コレクションで取得できるファイル名は、フルパスですか?
A:いいえ、Workbooks
コレクションで取得できるのはファイル名のみで、フルパスではありません。フルパスを取得するには、Workbooks("ファイル名").FullName
というプロパティを使用します。
Q:Dir
関数とワイルドカードを使って複数のファイルを一度に開くことはできますか?
A:はい、それが可能です。Dir
関数をループ内で使用することで、ワイルドカードに一致する複数のファイルを一度に開くことができます。
Q:VBAでファイル名を取得する際のエラーハンドリングはどうすればいいですか?
A:On Error Resume Next
とOn Error GoTo
ステートメントを使用して、エラーが発生した場合の処理を記述することが一般的です。例えば、指定したファイルが存在しない場合には、エラーメッセージを表示するような処理が考えられます。
Q:VBAで取得したファイル名をExcelのセルに出力する方法は?
A:Cells(row, column).Value
やRange("A1").Value
などのプロパティを使用して、取得したファイル名をExcelの特定のセルに出力することができます。
Q:特定のフォルダ内のすべてのファイル名を取得する方法は?
A:Dir
関数やFileSystemObject
を使用して、特定のフォルダ内のすべてのファイル名を取得することができます。これらの方法は、特に大量のファイルを一括で処理する際に非常に便利です。
関連動画
まとめ
VBAを使用してExcelのファイル名を取得する方法は多く、その用途も様々です。この記事で紹介した基本的な方法から応用テクニックまで、しっかりと理解し、自分のニーズに合わせて活用してください。
Excelのショートカットキーの練習
当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。
※推奨ブラウザ Google Chrome