Excel 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
このコードを使えば、フォルダ階層をすべてたどってファイルを取得できます。大規模なフォルダ構成に便利です。
「開いているブックのファイル名」を取得したい場合は、ThisWorkbook
や ActiveWorkbook
を使います。
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を使えば、簡単なコードでファイル名の取得や整理が可能です。
特定の拡張子を絞ったり、サブフォルダを含めたり、更新日時まで取得したりと、目的に応じて柔軟に対応できます。
Excelを使ったファイル管理をより効率よくしたい方は、ぜひ今回紹介したサンプルを実際に動かしてみてください。
実務で役立つスキルとして、きっとあなたの作業を助けてくれるはずです。