###実現したいこと
B2セルに入力されたパスにB5以降のセル情報を基にフォルダ階層を自動生成するVBAを作成したい
###バージョン
▽VBA
Microsoft Visual Basic for Applications 7.1
Version 1068
VBA: Retail 7.1.1068
▽Excel
Excel2013
###コードの参照元
https://fastclassinfo.com/entry/makefolders/
###内容
下記コードだと、コンパイル時にThenや;の部分でエラーが発生してしまいます。
参照元のサイトに記載のあった拡張機能は追加しているのですが、エラーが消えません。
上記のバージョンだと使用できない構文が混ざっているためでしょうか。
VBAに関する知識が乏しく、調べても分からなかったため今回質問させていただきました。
こちらのエラーを解決できる方がいらっしゃれば、ご回答をよろしくお願いします。
###3/9追記
下記コードyureighostさんに修正していただきましたが、自分の環境だと実行時にエラーやメッセージは表示されずフォルダも生成されない状態で処理が終了してしまいます。
何度見返してもどこが間違っているのか自分では判断がつかないため、ご存知であればご教示のほどよろしくお願いします。
3/9再追記
セルに数式が入力されている状態だとうまくマクロが処理してくれないみたいで、数式を消すことでフォルダが正常に作成されました。
###コード
VBA
1Option Explicit 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 Dim fs As FileSystemObject 9 Set fs = New Scripting.FileSystemObject 10 Set ws1 = Worksheets("フォルダ作成") 11 cmax = ws1.Cells(Rows.Count, 1).End(xlUp).Row 12 cnt = ws1.Cells(4, Columns.Count).End(xlToLeft).Column 13 14 '[1] セルB2にURLが記載されているかチェック 15 If ws1.Range("B2").Value = "" Then 16 MsgBox "セルB2に「作成先のフォルダURL」を入力して下さい" 17 ws1.Range("B2").Activate 18 Exit Sub 19 End If 20 21 url = ws1.Range("B2").Value 22 23 '[2] 同じ行に複数回記入されていないことを確認 24 For i = 5 To cmax 25 x = 0 26 For j = 0 To cnt - 2 27 If ws1.Cells(i, 2).Offset(0, j).Value <> "" Then 28 x = x + 1 29 End If 30 Next 31 32 If x > 1 Then 33 z = z + 1 34 End If 35 Next 36 37 '[3] 同じ行に複数回記入されていた場合、処理を止める 38 If z > 0 Then 39 MsgBox "入力情報を見直してください" 40 Exit Sub 41 End If 42 43 '[4] 階層別にフォルダを作成する 44 For j = 0 To cnt - 2 45 For i = 5 To cmax 46 If ws1.Cells(i, 2).Offset(0, j).Value <> "" Then 47 s1 = ws1.Cells(i, 2).Offset(0, j).Value 48 49 For k = 0 To j 50 If k - j = 0 Then 51 Exit For 52 End If 53 n1 = ws1.Cells(i, 2).Offset(0, j - k - 1).End(xlUp).Row 54 s1 = ws1.Cells(n1, 2).Offset(0, j - k - 1).Value & "\" & s1 55 Next 56 57 s = url & "\" & s1 58 fs.CreateFolder s 59 End If 60 Next 61 Next 62 63 Set fs = Nothing 64End Sub
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/06 03:36
2020/03/06 04:22
2020/03/06 04:25
2020/03/06 05:21