へたくそVBA
--モジュール1--
Sub フォルダ取得()
setei = Worksheets("書き出し結果").Range("E2").Value
setei2 = Worksheets("書き出し結果").Range("B2").Value
If setei <> 1 And setei <> 2 And setei <> 3 And setei <> 4 And setei <> 5 Then
MsgBox ("5階層までしかとれません。E2行目を見直してください")
Exit Sub
ElseIf setei2 = "" Then
MsgBox ("検索対象のフォルダを指定してください。B2行目に入力してください")
Exit Sub
End If
'データ削除
Dim x As Long
x = Rows.Count
Worksheets("data").Rows("5" & ":" & x).Clear
Worksheets("書き出し結果").Range("A5", "E" & x).Clear
'処理シート定義
Worksheets("data").Activate
Dim F1 As String
Dim i As Long
'階層の転記
i = 5
F1 = Dir(Cells(2, 2), vbDirectory)
Do While F1 <> ""
Cells(i, 1) = "1階層目"
Cells(i, 2) = F1
Cells(i, 3) = Cells(2, 2) & Cells(i, 2) & "\"
i = i + 1
F1 = Dir()
Loop
'セル削除("."と"..")
For i = i To 5 Step -1
If Cells(i, 2).Value = "." Or Cells(i, 2).Value = ".." Then
Range(Cells(i, 1), Cells(i, 3)).Delete Shift:=xlUp
End If
Next
'リスト化
i1 = Worksheets("data").Cells(Rows.Count, 3).End(xlUp).Row
Worksheets("data").Range(Cells(5, 1), Cells(i1, 3)).Copy
Worksheets("書き出し結果").Range("A5").PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
'2~5階層取得
setei = Worksheets("書き出し結果").Range("E2").Value
Select Case setei
Case 2
Call フォルダ取得2層目
Case 3
Call フォルダ取得2層目
Call フォルダ取得3層目
Case 4
Call フォルダ取得2層目
Call フォルダ取得3層目
Call フォルダ取得4層目
Case 5
Call フォルダ取得2層目
Call フォルダ取得3層目
Call フォルダ取得4層目
Call フォルダ取得5層目
End Select
'処理シート変更
Worksheets("書き出し結果").Activate
Application.CutCopyMode = False 'コピーモード解除
'最後の\マーク削除
For l = 5 To Cells(Rows.Count, 3).End(xlUp).Row
Dim Str As String
Str = Cells(l, 3).Value
Cells(l, 3) = Left(Str, Len(Str) - 1)
Next
'タイムスタンプ
Range("D5", "D" & Cells(Rows.Count, 3).End(xlUp).Row) = Format(Now(), "yyyymmdd hhmm")
Range("A5").Select
End Sub
Sub フォルダ取得2層目()
Dim F2 As String
Dim j As Long
'階層の転記
i = 5
j = 5 + i - 5
For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row
F2 = Dir(Cells(i, 3), vbDirectory)
Do While F2 <> ""
Cells(j, 4) = "2階層目"
Cells(j, 5) = F2
Cells(j, 6) = Cells(i, 3) & Cells(j, 5) & "\"
j = j + 1
F2 = Dir()
Loop 'jに+1して戻る
Next 'iに+1して戻る
'セル削除("."と"..")
For j = j To 5 Step -1
If Cells(j, 5).Value = "." Or Cells(j, 5).Value = ".." Then
Range(Cells(j, 4), Cells(j, 6)).Delete Shift:=xlUp
End If
Next
'リスト化
i2 = Worksheets("data").Cells(Rows.Count, 6).End(xlUp).Row
k = Worksheets("書き出し結果").Cells(Rows.Count, 1).End(xlUp).Row + 1
Worksheets("data").Range(Cells(5, 4), Cells(i2, 6)).Copy
Worksheets("書き出し結果").Range("A" & k).PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
End Sub
Sub フォルダ取得3層目()
Dim F3 As String '変更箇所
Dim i As Long
Dim j As Long
'階層の転記
i = 5
j = 5 + i - 5
For i = 5 To Cells(Rows.Count, 6).End(xlUp).Row '変更箇所
F3 = Dir(Cells(i, 6), vbDirectory) '変更箇所
Do While F3 <> "" '変更箇所
Cells(j, 7) = "3階層目" '変更箇所
Cells(j, 8) = F3 '変更箇所
Cells(j, 9) = Cells(i, 6) & Cells(j, 8) & "\" '変更箇所
j = j + 1
F3 = Dir() '変更箇所
Loop 'jに+1して戻る
Next 'iに+1して戻る
'セル削除("."と"..")
For j = j To 5 Step -1
If Cells(j, 8).Value = "." Or Cells(j, 8).Value = ".." Then '変更箇所
Range(Cells(j, 7), Cells(j, 9)).Delete Shift:=xlUp
End If
Next
'リスト化
i3 = Worksheets("data").Cells(Rows.Count, 9).End(xlUp).Row
k = Worksheets("書き出し結果").Cells(Rows.Count, 1).End(xlUp).Row + 1
Worksheets("data").Range(Cells(5, 7), Cells(i3, 9)).Copy
Worksheets("書き出し結果").Range("A" & k).PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
End Sub
Sub フォルダ取得4層目()
Dim F4 As String '変更箇所
Dim i As Long
Dim j As Long
'階層の転記
i = 5
j = 5 + i - 5
For i = 5 To Cells(Rows.Count, 9).End(xlUp).Row '変更箇所
F4 = Dir(Cells(i, 9), vbDirectory) '変更箇所
Do While F4 <> "" '変更箇所
Cells(j, 10) = "4階層目" '変更箇所
Cells(j, 11) = F4 '変更箇所
Cells(j, 12) = Cells(i, 9) & Cells(j, 11) & "\" '変更箇所
j = j + 1
F4 = Dir() '変更箇所
Loop 'jに+1して戻る
Next 'iに+1して戻る
'セル削除("."と"..")
For j = j To 5 Step -1
If Cells(j, 11).Value = "." Or Cells(j, 11).Value = ".." Then '変更箇所
Range(Cells(j, 10), Cells(j, 12)).Delete Shift:=xlUp
End If
Next
'リスト化
i4 = Worksheets("data").Cells(Rows.Count, 12).End(xlUp).Row
k = Worksheets("書き出し結果").Cells(Rows.Count, 1).End(xlUp).Row + 1
Worksheets("data").Range(Cells(5, 10), Cells(i4, 12)).Copy
Worksheets("書き出し結果").Range("A" & k).PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
End Sub
Sub フォルダ取得5層目()
Dim F5 As String '変更箇所
Dim i As Long
Dim j As Long
'階層の転記
i = 5
j = 5 + i - 5
For i = 5 To Cells(Rows.Count, 12).End(xlUp).Row '変更箇所
F5 = Dir(Cells(i, 12), vbDirectory) '変更箇所
Do While F5 <> "" '変更箇所
Cells(j, 13) = "5階層目" '変更箇所
Cells(j, 14) = F5 '変更箇所
Cells(j, 15) = Cells(i, 12) & Cells(j, 14) & "\" '変更箇所
j = j + 1
F5 = Dir() '変更箇所
Loop 'jに+1して戻る
Next 'iに+1して戻る
'セル削除("."と"..")
For j = j To 5 Step -1
If Cells(j, 14).Value = "." Or Cells(j, 14).Value = ".." Then '変更箇所
Range(Cells(j, 13), Cells(j, 15)).Delete Shift:=xlUp
End If
Next
'リスト化 変更必要
i5 = Worksheets("data").Cells(Rows.Count, 15).End(xlUp).Row
k = Worksheets("書き出し結果").Cells(Rows.Count, 1).End(xlUp).Row + 1
Worksheets("data").Range(Cells(5, 13), Cells(i5, 15)).Copy
Worksheets("書き出し結果").Range("A" & k).PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
End Sub
--モジュール2--
Sub 最新版と前回の差分確認()
'処理シート変更
Worksheets("書き出し結果").Activate
'前回分の確認結果(K)と色を消す
Cells.Interior.ColorIndex = 0
Range("B2", "C3").Interior.ColorIndex = 6
Range("E2").Interior.ColorIndex = 6
x = Rows.Count
Worksheets("書き出し結果").Range("K5", "K" & x).Clear
Dim myRange As Range
Dim myObj As Range
Dim keyWord As String
'E行に前回との差分あるかどうか書き出し
x = Cells(Rows.Count, 9).End(xlUp).Row
Set myRange = Range("I5", "I" & x)
'書き出し処理
For y = 5 To Cells(Rows.Count, 3).End(xlUp).Row
keyWord = Cells(y, 3).Value
Set myObj = myRange.Find(keyWord, LookAt:=xlWhole)
If myObj Is Nothing Then
Cells(y, 5) = "前回はなかったフォルダ"
Range(Cells(y, 1), Cells(y, 5)).Interior.ColorIndex = 6 ' 黄色
Else
Cells(y, 5) = myObj.Row & "行目"
End If
Next
'K行に最新分との差分あるかどうか書き出し
x = Cells(Rows.Count, 3).End(xlUp).Row
Set myRange = Range("C5", "C" & x)
'書き出し処理
For y = 5 To Cells(Rows.Count, 9).End(xlUp).Row
keyWord = Cells(y, 9).Value
Set myObj = myRange.Find(keyWord, LookAt:=xlWhole)
If myObj Is Nothing Then
Cells(y, 11) = "最新では消えているフォルダ"
Range(Cells(y, 7), Cells(y, 11)).Interior.ColorIndex = 6 ' 黄色
Else
Cells(y, 11) = myObj.Row & "行目"
End If
Next
End Sub