【ExcelVBA】選択したセルの値を名前にしてフォルダを作成するには

この記事では、選択したセルの値を名前にしてフォルダを作成する方法についてご説明します。

【動画】選択したセルの値を名前にしてフォルダを作成する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


選択されたセルの値を名前にMkDirステートメントを実行してフォルダを作成しています。

なお今回のサンプルでは、すでに同じフォルダがある場合と、セルが空白またはスペース文字だけのセルの場合はフォルダの作成処理は行いません。

マクロ作成の流れ

STEP.1
セルが空白またはスペース文字だけなのかを判定する
セルが空白またはスペース文字だけなのかを判定します。
もしセルが空白またはスペース文字だけの場合は何もせず、STEP.3に進みます。
もしセルが空白またはスペース文字だけでない場合はSTEP.2に進みます。
STEP.2
選択されたセルの値のフォルダがすでに存在しているか判定する
選択されたセルの値のフォルダがすでに存在しているか判定します。
もしすでに存在している場合はSTEP.3に進みます。
もしまだ存在していない場合は、選択されたセルの値を名前にMkDirステートメントを実行してフォルダを作成しSTEP.3に進みます。
STEP.3
選択されたセルの数だけSTEP.1からSTEP.3を繰り返す
選択されたセルの数だけSTEP.1からSTEP.3を繰り返します。

Excelファイルの例

今回用意したExcelファイルは次の通りです。

コードの例

Excelのマクロのコード(例)

Option Explicit

Sub test()

    Dim cellInfo    As Variant      '所得したセルの状態用変数
    Dim cellVal     As String       'セルの値格納用変数
    Dim fldrStr     As String       'セルに入力された、生成したいフォルダの名前
    
    For Each cellInfo In Application.Selection
        
        'スペース文字は削除する(ブランクに置換)
        cellVal = Replace(cellInfo.Text, " ", "")
        
        If cellVal <> "" Then
        
            'セルがスペース文字だけ、またはブランクだけの場合
        
            '作成するフォルダ名をフルパスで取得する
            fldrStr = Worksheets("work").Range("fldrMkPath").Value & "\" & cellInfo.Text
        
            If Dir(fldrStr, vbDirectory) = "" Then
            
                '同じ名前のフォルダが存在しない場合
                
                'フォルダを作成する
                MkDir fldrStr
            
            End If
        
        End If
    
        DoEvents
    
    Next cellInfo
    
End Sub

注目すべきコード①

最初に見て頂きたいのは9行目です。

    For Each cellInfo In Application.Selection

以上のコードは、選択されたセルの数だけ変数cellInfoにそのセルの情報を返すループ処理のコードです。

Application.Selectionプロパティは全て選択されたセルの情報を返します。

例えばセルが10個選択されていれば、10回ループします。

そのセル一つ一つに対して情報を返すので、例えば選択されたセルがどの位置にあるか、選択されたセルの値は何なのか、などを特定することができます。

注目すべきコード②

次に見て頂きたいのは12行目から14行目です。

        'スペース文字は削除する(ブランクに置換)
        cellVal = Replace(cellInfo.Text, " ", "")
        
        If cellVal <> "" Then

以上のコードは、セルの値に含まれるスペース文字を削除(ブランクに置換)し、その結果ブランクだけなのかを判定している処理のコードです。

もしブランクだけの場合、名前が無いフォルダを作ることはできないのでこのIF文(14行目)の判定には合致しません。

注目すべきコード③

次に見て頂きたいのは19行目から28行目です。

            '作成するフォルダ名をフルパスで取得する
            fldrStr = Worksheets("work").Range("fldrMkPath").Value & "\" & cellInfo.Text
        
            If Dir(fldrStr, vbDirectory) = "" Then
            
                '同じ名前のフォルダが存在しない場合
                
                'フォルダを作成する
                MkDir fldrStr
            
            End If

以上のコードは、選択されたセルの値と同じ値の名前のフォルダが存在しない場合はそのセルの値でフォルダを作成する処理のコードです。

選択されたセルの値と同じ値の名前のフォルダが存在しないかを確認するにはDir関数を使います。

選択されたセルの値と同じ値の名前のフォルダが存在しない場合は、Dir関数がブランクを返します。

なので、Dir関数がブランクを返す場合は26行目でMkDirステートメントを実行してフォルダを作成します。

動作確認

選択したセルに値がある場合

マクロ実行前

複数のセルが選択された状態です。

マクロ実行後

マクロを実行した結果、選択されたセルの値を名前にしてフォルダが作成されました。

選択したセルに値がない、または空白場合

マクロ実行前

値がない、または空白のセルが複数選択された状態です。

マクロ実行後

何もフォルダは作成されません。

同じ値の名前のフォルダがすでに作成されている場合

マクロ実行前

「01_拠点管理」「02_設計書」「03_テスト証跡」の3つが入力されたセルが選択されています。

出力先のフォルダには上の3つの名前のフォルダがすでに存在しています。

マクロ実行後

マクロ実行後は、フォルダの中身に変化はありません。(フォルダを作成する処理は行われずマクロが終了)

最後に

本記事では、選択したセルの値を名前にしてフォルダを作成する方法についてご説明しました。

複数のフォルダを作成したい場合に、フォルダを作成して名前を付ける、という作業を一つ一つ行うのは面倒ですが、今回紹介したマクロを使えば時間をかけずに終わらせることができます。

もし複数のフォルダを作成するのが面倒だと感じている場合は参考にしてみてくださいね。

Excelのスキル向上やExcelの基礎知識をしっかりと学びたいなら

Excelのスキルを習得したい、Excelの基礎知識をもっと理解したい、そう考えているなら「無期限サポート付きExcel講座【すごい改善】」がおすすめです。

Excelのスキルの基礎を身につけるなら【すごい改善】で無期限サポート付きがあるので、これで「Excelのスキルや基礎」を学ぶのにおすすめですよ。

→ 受講後、何度でも無期限でメールで質問できるアフターサポートがついているExcelマスター講座はこちら