任意のフォルダ内にあるファイル一覧を、エクセルのシートに表示するVBAを紹介します。
ファイルの整理や文書作成、資料比較などのために、ファイル名やフォルダ名の一覧を取得したいんです。
そうなると、コマンドプロンプトを起動し、Dirコマンドを実行し、その結果を出力しないといけないですね。
・・・。
コピペのみでフォルダ内のファイル名一覧を表示できるようにしますので、興味があれば解説も読んでみてください。
やってみます!
フォルダ内のファイル名一覧を表示するVBA
Sub ファイル名取得()
Const SEARCH_DIR As String = “C:¥Users¥¥フォルダ名”
Const SEARCH_FILE As String = “.csv”
Dim tmpFile As String
Dim strCmd As String
Dim buf() As Byte
Dim FileList() As String
Dim myArray() As String
Dim cnt As Long, pt As Long, i As Long
tmpFile = Environ(“TEMP”) & “¥Dir.tmp”
strCmd = “Dir “”” & SEARCH_DIR & “¥” & SEARCH_FILE & _
“”” /b/s/a:-d > “”” & tmpFile & “”””
With CreateObject(“Wscript.Shell”)
.Run “cmd /c” & strCmd, 7, True
End With
If FileLen(tmpFile) < 1 Then
MsgBox “該当するファイルがありません”
Exit Sub
End If
Open tmpFile For Binary As #1
ReDim buf(1 To LOF(1))
Get #1, , buf
Close #1
Kill tmpFile
FileList() = Split(StrConv(buf, vbUnicode), vbCrLf)
cnt = UBound(FileList)
ReDim myArray(1 To cnt, 1 To 2)
For i = 1 To cnt
pt = InStrRev(FileList(i – 1), “¥”)
myArray(i, 1) = Left(FileList(i – 1), pt)
myArray(i, 2) = Mid(FileList(i – 1), pt + 1)
Next i
Sheets(“ファイル名”).Select
Cells.ClearContents
Range(“A1”).Value = “パス”
Range(“B1”).Value = “ファイル名”
Range(“A2”).Resize(cnt, 2).Value = myArray
End Sub
フォルダ内のファイル名一覧を表示するVBAの解説
フォルダのパスを簡単に取得するには
検索したいフォルダを開き、赤丸のフォルダマークをクリックするとフォルダのパスが表示されるので、コピーしてVBAの記述へ貼り付ける。
TEMPとは
環境変数のこと。
コントロールパネル→システム→システムの詳細設定メニューの「詳細設定」タブ→環境変数 から新規設定や編集が可能。
WSHとは
Windows上で簡易なコンピュータプログラムであるスクリプトを実行できるようにするソフトウェア
パスとファイル名を分けない場合
「ReDim myArray(1 To cnt, 1 To 2)」以降を削除し次のVBAを記述する
Range(“A1”).Value = “フルパス”
‘Range(“A2”).Resize(cnt, 1).Value = WorksheetFunction.Transpose(FileList)
コメント