フォルダーの中に入っているファイルの一覧がほしい!そんな時に使用できるVBAコードを紹介をします。
概要
紹介するコードの動作は任意のフォルダー内に存在するファイル名称とファイルパスの取得を行うツールです。今回は「ファイルパス」、「ファイルが存在するフォルダー名称」、「ファイル名称」、「更新日」、「拡張子」を取得しています。
使い方
下記の長いソースコードを貼り付けて使用してください。起動すれば自動的に「ファイルパス」「フォルダー名」「ファイル名」「更新日」「拡張子」を抽出したcsvファイルを作成します。任意のフォルダーへ作成したエクセルを移動させてから起動してください。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
Dim YYY, YYY_2, XXX As Long Dim CONT(1000), PASS_Z, FOLDER_NAME As String Dim DATE1 As Date Dim f, objFso, objFolder As Object Sub GET_START() Worksheets("取得").Activate Call main_get Call writeCSV End Sub Sub main_get() YYY = 2 XXX = 2 YYY_2 = 2 Range("A2:Z10000").Delete CONT(XXX) = ThisWorkbook.Path Call Get_SUB(ThisWorkbook.Path) End Sub Sub Get_SUB(Pass_1111 As String) XXX = XXX + 1 Call GET_FOLDER(Pass_1111) Set objFso = CreateObject("Scripting.FileSystemObject") For Each f In objFso.GetFolder(Pass_1111).SubFolders FOLDER_NAME = f.NAME CONT(XXX) = FOLDER_NAME Call Get_SUB(f.Path) Next f Set objFso = Nothing CONT(XXX) = "" XXX = XXX - 1 End Sub Sub GET_FOLDER(Pass1 As String) Dim NAME As String Dim NAME2 As String NAME = Dir(Pass1 & "\") If NAME <> "" Then Do While NAME <> "" If NAME <> "." And NAME <> ".." Then Cells(YYY_2, 3).Value = NAME 'ファイル名称 Cells(YYY_2, 2).Value = CONT(XXX - 1) 'フォルダ名称 Call RE_NAME 'ファイルパス入力 '更新日 NAME2 = PASS_Z & NAME Cells(YYY_2, 4).Value = FileDateTime(NAME2) 'ファイル更新日 '拡張子 Call GET_KK(NAME2) NAME = Dir() End If YYY_2 = YYY_2 + 1 YYY = YYY + 1 PASS_Z = "" Loop ElseIf NAME = "" Then Call RE_NAME YYY = YYY + 1 YYY_2 = YYY_2 + 1 End If If PASS_Z <> "" Then PASS_Z = "" End If End Sub Sub RE_NAME() For COUNT_A = 2 To XXX If CONT(COUNT_A) <> "" Then PASS_Z = PASS_Z & CONT(COUNT_A) & "\" End If Next COUNT_A Cells(YYY_2, 1).Value = PASS_Z End Sub Sub GET_KK(PASS_K) Dim TEST_fso As New Scripting.FileSystemObject Dim filePath As String Dim ExtentionName As String filePath = PASS_K ExtentionName = TEST_fso.GetExtensionName(filePath) Cells(YYY_2, 5).Value = (ExtentionName) Set TEST_fso = Nothing End Sub Sub writeCSV() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim csvFile As String csvFile = ActiveWorkbook.Path & "\data" & Year(Now()) & "年" & Month(Now()) & "月" & Day(Now()) & " 日" & " " & Hour(Now()) & "時" & Minute(Now()) & "分" & Second(Now()) & "秒" & ".csv" Open csvFile For Output As #1 Dim i As Long, j As Long i = 1 Do While ws.Cells(i, 1).Value <> "" j = 1 Do While ws.Cells(i, j + 1).Value <> "" Print #1, ws.Cells(i, j).Value & ","; j = j + 1 Loop Print #1, ws.Cells(i, j).Value & vbCr; i = i + 1 Loop Close #1 End Sub |
コメント