目的はサブフォルダまでまとめてマクロで自動作成するために、エクセルに作成したフォルダ構成一覧表を自動作成用に調整する作業を自動化することです。
まず、フォルダ構成一覧表は以下の形式で作成する予定です。
|第一階層|第二階層|第三階層|第四階層|
|:--|:--:|--:|
|A|1|①|ア|
||2|①|ア|
|||②|ア
|B|1|①|ア
ただ、フォルダを自動で作成する際、下のマクロを使用するつもりですが、各階層ごとに行をずらす必要があります。
|第一階層|第二階層|第三階層|第四階層|
|:--|:--:|--:|
|A||||
||1|||
|||①||
||||ア|
||2|||
|||①||
||||ア|
|||②|
||||ア
|B|||
||1||
|||①|
||||ア
このずらす内容を言葉で表すと
「第一階層列の文字が入力されているセルの右上に文字が入力されている場合、第一階層から第四
階層まで行挿入、下のセルを探しに行き繰り返す。次に第二階層でも同様の探索を行い、行挿入の範囲だけ第二階層から第四階層までに変更。以降繰り返し」になりますが、これをマクロで作成する方法が分からないので質問しました。
ただ、そもそもフォルダ作成時に表の調整が必要な下のマクロを使うのではなく、ほかにも良い方法があればそちらをご紹介いただけると幸いです。
よろしくお願いいたします。
Option
1 2Sub makefolder() 3 Dim i As Long, cmax As Long, x As Long, z As Long, cnt As Long, j As Long, k As Long 4 Dim ws1 As Worksheet 5 Dim str As String, url As String 6 Dim s As String, s1 As String 7 Dim n1 As Long 8 9 Dim fs As FileSystemObject 10 Set fs = New Scripting.FileSystemObject 11 12 Set ws1 = Worksheets("A") 13 14 cmax = ws1.Range("A65536").End(xlUp).Row 15 cnt = ws1.Range("IV4").End(xlToLeft).Column 16 '[1] セルB2にURLが記載されているかチェック 17 If ws1.Range("B2").Value = "" Then 18 MsgBox "セルB2に「作成先のフォルダURL」を入力して下さい" 19 ws1.Range("B2").Activate 20 Exit Sub 21 End If 22 url = ws1.Range("B2").Value 23 '[2] 同じ行に複数回記入されていないことを確認 24 For i = 5 To cmax 25 x = 0 26 For j = 0 To cnt - 2 27 If ws1.Range("B" & i).Offset(0, j).Value <> "" Then 28 x = x + 1 29 End If 30 Next 31 If x > 1 Then 32 z = z + 1 33 End If 34 Next 35 '[3] 同じ行に複数回記入されていた場合、処理を止める 36 If z > 0 Then 37 MsgBox "入力情報を見直してください" 38 Exit Sub 39 End If 40 '[4] 階層別にフォルダを作成する 41 For j = 0 To cnt - 2 42 For i = 5 To cmax 43 s = "" 44 If ws1.Range("B" & i).Offset(0, j).Value <> "" Then 45 s1 = ws1.Range("B" & i).Offset(0, j).Value 46 For k = 0 To j 47 If k - j = 0 Then 48 Exit For 49 End If 50 n1 = ws1.Range("B" & i).Offset(0, j - k - 1).End(xlUp).Row 51 s1 = ws1.Range("B" & n1).Offset(0, j - k - 1).Value & "\" & s1 52 Next 53 s = url & "\" & s1 54 fs.CreateFolder s 55 End If 56 Next 57 Next 58 Set fs = Nothing 59End Sub 60 61 62 63 64 65コード
回答2件
あなたの回答
tips
プレビュー