Categories: excel

VBAでファイル名を簡単に取得する方法|サンプルコード付きで初心者にもわかりやすく解説

Excel VBAを使って作業を自動化する中で、「ファイル名を取得したい」と思ったことはありませんか?
フォルダ内のファイル一覧を取得したり、開いているファイルの名前を取得したりと、VBAでファイル名を扱う場面は意外と多くあります。
この記事では、初心者にもわかりやすく、VBAでファイル名を取得する方法を具体的なコードとともに丁寧に解説します。
「どんな場面で使えるの?」「どこまでできるの?」といった疑問にも答えながら、実用的なテクニックをご紹介していきます。


VBAでファイル名を取得する基本的な方法

まずは、VBAでフォルダ内のファイル名を取得する基本的な方法から紹介します。
以下のサンプルコードでは、特定のフォルダにあるすべてのファイル名を、Excelのシートに一覧として書き出します。

Sub GetFileNames()
Dim folderPath As String
Dim fileName As String
Dim i As Long

' 対象フォルダのパス(必要に応じて変更)
folderPath = "C:\Users\YourName\Documents\Test\"

' 最後に「\」がなければ追加
If Right(folderPath, 1) <> "\" Then
folderPath = folderPath & "\"
End If

' 最初のファイルを取得
fileName = Dir(folderPath)

i = 1
Do While fileName <> ""
Cells(i, 1).Value = fileName
i = i + 1
fileName = Dir()
Loop

MsgBox "ファイル名の取得が完了しました。"
End Sub

このコードを実行すると、指定フォルダにあるすべてのファイル名がA列に表示されます。
「Dir関数」を使ってファイル名を1つずつ取得している点がポイントです。


特定の拡張子のみを取得する方法

特定のファイルタイプ、たとえば「.xlsx」や「.txt」などだけを取得したい場合は、Dir関数にワイルドカードを指定します。

fileName = Dir(folderPath & "*.xlsx")

これにより、Excelファイルだけを取得できます。下記のようにコードを少し変更して実装可能です。

Sub GetExcelFilesOnly()
Dim folderPath As String
Dim fileName As String
Dim i As Long

folderPath = "C:\Users\YourName\Documents\Test\"
If Right(folderPath, 1) <> "\" Then
folderPath = folderPath & "\"
End If

fileName = Dir(folderPath & "*.xlsx")
i = 1
Do While fileName <> ""
Cells(i, 1).Value = fileName
i = i + 1
fileName = Dir()
Loop

MsgBox "Excelファイルの一覧取得が完了しました。"
End Sub

ファイルのフルパスを取得する

ファイル名だけでなく、フルパス(パス + ファイル名)を取得したい場合は、以下のように書き換えます。

Cells(i, 1).Value = folderPath & fileName

これにより、実際にファイルを開く処理などで使いやすくなります。


サブフォルダの中まで検索する(再帰処理)

Dir関数では、標準ではサブフォルダ内までは検索してくれません。
サブフォルダ内のファイルも含めて一覧を取得したい場合は、再帰処理を使って対応します。

Sub GetAllFilesRecursive()
Dim startPath As String
startPath = "C:\Users\YourName\Documents\Test\"
Call GetFilesInFolder(startPath)
MsgBox "すべてのファイル名を取得しました。"
End Sub

Sub GetFilesInFolder(ByVal folderPath As String)
Dim fileName As String
Dim subFolder As String
Dim rowIndex As Long
Static i As Long

If Right(folderPath, 1) <> "\" Then
folderPath = folderPath & "\"
End If

fileName = Dir(folderPath & "*.*", vbNormal)
Do While fileName <> ""
i = i + 1
ThisWorkbook.Sheets(1).Cells(i, 1).Value = folderPath & fileName
fileName = Dir()
Loop

subFolder = Dir(folderPath, vbDirectory)
Do While subFolder <> ""
If subFolder <> "." And subFolder <> ".." Then
If (GetAttr(folderPath & subFolder) And vbDirectory) = vbDirectory Then
Call GetFilesInFolder(folderPath & subFolder & "\")
End If
End If
subFolder = Dir()
Loop
End Sub

このコードを使えば、フォルダ階層をすべてたどってファイルを取得できます。大規模なフォルダ構成に便利です。


開いているブックのファイル名を取得する

「開いているブックのファイル名」を取得したい場合は、ThisWorkbookActiveWorkbook を使います。

Sub ShowActiveWorkbookName()
MsgBox "現在開いているブックの名前:" & ActiveWorkbook.Name
End Sub

さらに、パス込みで取得したい場合は .FullName を使います。

MsgBox "フルパス:" & ActiveWorkbook.FullName

ファイル名から拡張子を取り除く方法

取得したファイル名から拡張子を除きたい場合は、以下のように処理します。

Dim baseName As String
baseName = Left(fileName, InStrRev(fileName, ".") - 1)

InStrRev 関数で最後の「.」の位置を探し、Left 関数でそこまでの文字列を取り出しています。


実用例:ファイル名と最終更新日を一覧にする

以下は、ファイル名とその更新日をExcelに出力するサンプルです。

Sub ListFileNamesAndDates()
Dim folderPath As String
Dim fileName As String
Dim i As Long

folderPath = "C:\Users\YourName\Documents\Test\"
If Right(folderPath, 1) <> "\" Then
folderPath = folderPath & "\"
End If

fileName = Dir(folderPath)
i = 1
Do While fileName <> ""
Cells(i, 1).Value = fileName
Cells(i, 2).Value = FileDateTime(folderPath & fileName)
i = i + 1
fileName = Dir()
Loop

MsgBox "ファイル名と更新日の一覧が完了しました。"
End Sub

このようにすれば、ファイル管理表を自動で作成することも可能になります。


まとめ:VBAでのファイル名取得は業務効率化に直結!

VBAを使えば、簡単なコードでファイル名の取得や整理が可能です。
特定の拡張子を絞ったり、サブフォルダを含めたり、更新日時まで取得したりと、目的に応じて柔軟に対応できます。

Excelを使ったファイル管理をより効率よくしたい方は、ぜひ今回紹介したサンプルを実際に動かしてみてください。
実務で役立つスキルとして、きっとあなたの作業を助けてくれるはずです。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。