Excel VBA 指定ディレクトリ内のフォルダ名を表示(その1)
[ExcelVBA]指定ディレクトリ内のフォルダ名を表示(その1)
前提条件
・A1セルにディレクトリパスを入力しておくこと
(例:C:\)
・サブプロシージャを以下の順で実行すること
showFolderCnt1() → showFolderList1() → showLine1()
サブプロシージャ
showFolderCnt1()
B1セルにフォルダの数を表示
showFolderList1()
以下のようにフォルダを表示
例)
folder1←B2セル
folder2←B3セル
folder3←B4セル
・
・
/←終わり
showLine1()
以下のように線を引く
例)
・フォルダが1つ
└───folder1
・フォルダが2つ
├───folder1
└───folder2
・フォルダが3つ
├───folder1
├───folder2
└───folder3
Option Explicit
Sub showFolderCnt1()
'==========================
'A1セルの文字列を取得
'==========================
Dim rootStr As String
rootStr = Cells(1, "A").Value
If Right(rootStr, 1) <> "\" Then
rootStr = rootStr & "\"
End If
'==========================
'フォルダ数分ループ
'==========================
Dim folName As String
'一番最初のフォルダ
folName = Dir(rootStr, vbDirectory)
Dim Cnt As Integer
Cnt = 0
Do While folName <> ""
If folName <> "." And folName <> ".." Then
'フォルダ名のみカウントする
'(※dir関数はフォルダが存在しない場合ファイルを表示してしまうので)
If (GetAttr(rootStr & "\" & folName) And vbDirectory) = vbDirectory Then
Cnt = Cnt + 1
End If
End If
folName = Dir '次のフォルダへ
Loop
'B1セルにフォルダ数を表示
Cells(1, "B").Value = Cnt
End Sub
Sub showFolderList1()
'==========================
'A1セルの文字列を取得
'==========================
Dim rootStr As String
rootStr = Cells(1, "A").Value
If Right(rootStr, 1) <> "\" Then
rootStr = rootStr & "\"
End If
'==========================
'フォルダ数分ループ
'==========================
Dim folName As String
'一番最初のフォルダ
folName = Dir(rootStr, vbDirectory)
Dim y As Integer
y = 2 '2行目
Do While folName <> ""
If folName <> "." And folName <> ".." Then
'フォルダ名のみ表示する
'(※dir関数はフォルダが存在しない場合ファイルを表示してしまうので)
If (GetAttr(rootStr & "\" & folName) And vbDirectory) = vbDirectory Then
'B?に表示
Cells(y, "B").Value = folName
y = y + 1
End If
End If
folName = Dir '次のフォルダへ
Loop
Cells(y, "B").Value = "/" '←終了
End Sub
Sub showLine1()
'B1セルよりフォルダ数を取得
Dim folCnt As Integer
folCnt = Cells(1, "B").Value
If folCnt = 0 Then
'何もしないで終了
Exit Sub
ElseIf folCnt = 1 Then
'A2セル
Cells(2, "A").Value = "└───"
ElseIf folCnt = 2 Then
'A2セル
Cells(2, "A").Value = "├───"
'A3セル
Cells(3, "A").Value = "└───"
ElseIf folCnt > 2 Then
'A2セル
Cells(2, "A").Value = "├───"
'A2セル〜A?(最終セルの手前)
Dim y As Integer
For y = 3 To folCnt
Cells(y, "A").Value = "├───"
Next y
'最終セルはフォルダ数+1
Cells(folCnt + 1, "A").Value = "└───"
Else
'何もしないで終了
Exit Sub
End If
End Sub