LoginSignup
0
1

More than 5 years have passed since last update.

Excel Vba をつかって、フォルダ内のファイル一覧を全て取得する。

Last updated at Posted at 2017-03-11

懸念(誰か教えてください)

Excel Vba にて、再起って使ってもいいの?笑
したり顔で「32bit版だとリソース不足になりやすい」とか何とか言われたことが汗

VBAのエラーは処理しづらい汗

'
' 使い方
' 以下の Test01 を標準モジュール内に記述、イミディエイトより直接起動する。
'
Public Sub Test01()
    Dim wPaths$()
    Call createFilelist(Environ("USERPROFILE"), wPaths)
    Dim i&
    For i = LBound(wPaths) To UBound(wPaths)
        ThisWorkbook.Sheets("Sheet1").Cells(i + 1, 1) = wPaths(i)
    Next
End Sub


'
' サブフォルダ内のファイル一覧を作成する
' 
Public Sub createFilelist(ByRef argSearchPath$, ByRef argFileList$())

    Dim FSO             As Object
    Dim wSubFolder      As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    On Error GoTo End_Of_createFilelist
    For Each wSubFolder In FSO.GetFolder(argSearchPath).SubFolders
        Call createFilelist(wSubFolder.Path, argFileList$)
    Next

    Dim wFile           As Object
    For Each wFile In FSO.GetFolder(argSearchPath).Files
        Call extendArray(argFileList, wFile.Path)
    Next

    Set FSO = Nothing
End_Of_createFilelist:
    On Error GoTo 0
End Sub

'
' 配列項目を拡張し、第2引数(Option)を追加する
Public Sub extendArray(ByRef list As Variant, Optional addItem = Null)
    Dim i&
    On Error Resume Next
    i = UBound(list)
    If Err.Number = 0 Then
        ReDim Preserve list(UBound(list) + 1)
    Else
        ReDim Preserve list(0)
    End If
    On Error GoTo 0
    If IsNull(addItem) = False Then
        If IsObject(addItem) = True Then
            Set list(UBound(list)) = addItem
        Else
            list(UBound(list)) = addItem
        End If
    End If
End Sub
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1