【Word VBA】フォルダー一括作成マクロ▽ソースコード

記事
IT・テクノロジー
HC220322A.png

Option Explicit
Option Base 0
Public Sub フォルダー一括作成マクロ()
    Const BASEFOLDER = "G:\" '基本のフォルダー
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer, Kp As Integer
    Dim varFldN As Variant, varWork As Variant
    Dim strFldN() As String
    Dim intFldL() As Integer
    Dim varTemp As Variant, strTemp As String
    '############################
    ' フォルダー名テーブル (1;→1-1;→1-1-1;→1-1-1-1;
    '############################
    varFldN = Array("1;関東", "2;関西", "3;北陸", _
                     "1-1;東京都", "1-2;神奈川県", "1-3;千葉県", _
                     "1-4;埼玉県", "1-5;茨城県", "1-6;栃木県", _
                     "1-7;群馬県", _
                     "2-1;大阪府", "2-2;京都府", "2-3;兵庫県", _
                     "2-4;滋賀県", "2-5;奈良県", "2-6;和歌山県", _
                     "3-1;富山県", "3-2;石川県", "3-3;福井県", _
                     "1-1-1;千代田区", "1-1-2;港区", "1-1-3;港区", _
                     "1-2-1;横浜市", "1-2-2;横須賀市", _
                     "2-1-1;大阪市", "2-1-2;堺市", "2-1-3;吹田市", _
                     "2-2-1;京都市", "2-2-2;宇治市", _
                     "2-2-3;長岡京市", _
                     "2-3-1;神戸市", "2-3-2;明石市", _
                     "3-1-1;富山市", "3-2-1;金沢市", "3-2-2;加賀市", _
                     "3-3-1;福井市", "3-3-2;坂井市", "3-3-3;勝山市", _
                     "3-3-4;敦賀市", "3-3-5;越前市", "3-3-6;鯖江市")
'
 If MsgBox("フォルダー一括作成しますか?", vbYesNo+vbExclamation) _                      = vbNo Then
       Exit Sub
    End If
'
    '*配列再定義
    ReDim strFldN(UBound(varFldN, 1), 2), intFldL(UBound(varFldN, 1))
    '*番号と名称を分離
    For Ip = LBound(varFldN, 1) To UBound(varFldN, 1)
        varWork = Split(varFldN(Ip), ";")
        varTemp = Split(varWork(0), "-"): strTemp = ""
        For Jp = LBound(varTemp, 1) To UBound(varTemp, 1)
            strTemp = strTemp & Format(Val(varTemp(Jp)), "000") & "-"
        Next Jp
        strFldN(Ip, 0) = strTemp: strFldN(Ip, 1) = varWork(1)
    Next Ip
    '
    For Ip = LBound(varFldN, 1) To UBound(varFldN, 1)
        intFldL(Ip) = -1
        If Len(strFldN(Ip, 0)) > 4 Then
           strTemp = Left(strFldN(Ip, 0), Len(strFldN(Ip, 0)) - 4)
           For Jp = LBound(varFldN, 1) To UBound(varFldN, 1)
               If strFldN(Jp, 0) = strTemp Then
                  intFldL(Ip) = Jp: Exit For
               End If
           Next Jp
        End If
    Next Ip
    '*パス名生成
    For Ip = LBound(varFldN, 1) To UBound(varFldN, 1)
        If intFldL(Ip) = -1 Then
            strFldN(Ip, 2) = BASEFOLDER & strFldN(Ip, 1)
        Else
            strFldN(Ip, 2) = strFldN(intFldL(Ip), 2) & "\" & _
            strFldN(Ip, 1)
        End If
        strFldN(Ip, 2) = Replace(strFldN(Ip, 2), "\\", "\")
    Next Ip
    '*フォルダー作成
    Jp = 0
    For Ip = LBound(varFldN, 1) To UBound(varFldN, 1)
        If Dir(strFldN(Ip, 2), vbDirectory) = "" Then
           MkDir strFldN(Ip, 2): Jp = Jp + 1
        End If
    Next Ip
    Ip = MsgBox(Format(Jp, "###0") & _
       "個のフォルダーを作成しました。",   vbInformation + vbOKOnly)
End Sub

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら