wanna.jp VBAリファレンス
Top > VBA関数リファレンス > VBA MkDirで顧客別フォルダを自動作成!営業さんの悩みを解消する時短術

VBA MkDirで顧客別フォルダを自動作成!営業さんの悩みを解消する時短術

新規顧客が増えるたびに、見積書や請求書、契約書...お客様ごとに必要なファイルを整理するためのフォルダを、手作業で作成していませんか?これは地味ながらも意外と時間がかかり、忙しい営業さんにとっては大きな負担ですよね。うっかりミスで違う場所に保存してしまったり、どこに保存したか分からなくなったり…なんて経験もあるかもしれません。
ご安心ください!今回は、VBAの「MkDir」関数を使って、顧客別フォルダを自動で、しかも堅牢に作成する方法を、VBA初心者の方でもコピペで簡単に試せる形でご紹介します。これで、営業活動の効率がぐっとアップすること間違いなしです!

1. まずは基本!MkDirでフォルダを作成するコード

まずは「MkDir」関数の最もシンプルな使い方を見てみましょう。
以下のコードをVBAのエディタに貼り付けて実行するだけで、「C:\Client\Sony」というフォルダが作成されます。

Sub CreateClientFolderBasic()
    Dim folderPath As String
    
    ' ここに作成したいフォルダのパスを指定します (例: "C:\Client\Sony")
    folderPath = "C:\Client\Sony" 
    
    ' 指定されたパスにフォルダを作成
    MkDir folderPath
    
    MsgBox "フォルダ '" & folderPath & "' が作成されました。", vbInformation
End Sub

簡単ですよね!このコードを実行すると、指定した場所にフォルダが一つ作られます。

2. 落とし穴を回避!実践的なフォルダ作成コード

MkDir関数は非常にシンプルで使いやすい反面、実務で使う際にはいくつか注意すべき「落とし穴」があります。

ご安心ください。これらの落とし穴をスマートに回避し、どのような状況でも確実にフォルダを作成するための、堅牢なコードをご紹介します。このコードは、まずフォルダが存在するかどうかを確認し、さらに、必要な親フォルダも自動的に作成する機能を備えています。

Function CreateFolderRecursive(ByVal folderPath As String) As Boolean
    ' 複数階層のフォルダを、親フォルダが存在しない場合でも安全に作成する関数
    ' 成功した場合は True、失敗した場合は False を返します。
    
    Dim parts() As String
    Dim currentPath As String
    Dim i As Long
    
    On Error GoTo ErrorHandler
    
    ' フォルダが既に存在するかチェック (Dir関数を使用)
    If Dir(folderPath, vbDirectory) <> "" Then
        CreateFolderRecursive = True
        Exit Function
    End If
    
    ' ドライブレター部分の初期化とパスの分割
    Dim driveLetter As String
    Dim pathOnly As String
    
    If InStr(folderPath, ":") > 0 Then ' ドライブレターがある場合 (例: "C:\Client\Sony")
        driveLetter = Left(folderPath, InStr(folderPath, ":") + 0) ' "C:" を取得
        pathOnly = Mid(folderPath, InStr(folderPath, ":") + 2) ' "Client\Sony" を取得
    Else ' ドライブレターがない場合 (相対パスやUNCパス。ここではローカル絶対パスを推奨)
        driveLetter = ""
        pathOnly = folderPath
    End If
    
    parts = Split(pathOnly, "\")
    
    currentPath = driveLetter
    ' ドライブレターがあれば、一旦 "C:\" の形にする
    If Len(currentPath) > 0 And Right(currentPath, 1) <> "\" Then currentPath = currentPath & "\"
    
    ' 各階層のフォルダを順に作成
    For i = LBound(parts) To UBound(parts)
        If parts(i) <> "" Then ' 空の要素 (例: C:\\ のような二重バックスラッシュから発生) はスキップ
            ' 現在のパスが \ で終わっていなければ追加
            If Len(currentPath) > 0 And Right(currentPath, 1) <> "\" Then
                currentPath = currentPath & "\"
            End If
            currentPath = currentPath & parts(i)
            
            If Dir(currentPath, vbDirectory) = "" Then ' 現在のパスのフォルダが存在しなければ作成
                MkDir currentPath
            End If
        End If
    Next i
    
    CreateFolderRecursive = True
    Exit Function
    
ErrorHandler:
    MsgBox "フォルダ作成中にエラーが発生しました: " & Err.Description & vbCrLf & _
           "失敗パス: " & currentPath & vbCrLf & _
           "管理者権限がないか、パスが無効な可能性があります。", vbCritical
    CreateFolderRecursive = False
End Function

Sub CreateClientFolderRobust()
    Dim clientName As String
    Dim baseFolderPath As String
    Dim fullFolderPath As String
    
    ' --- ここを設定してください ---
    ' 顧客フォルダを作成するベースのパス (例: "C:\営業データ\顧客情報\")
    baseFolderPath = "C:\営業データ\顧客情報\" 
    ' -----------------------------
    
    ' 新規顧客名 (例として "Sony" を使用)
    clientName = "Sony"
    
    ' 作成したい完全なフォルダパス
    fullFolderPath = baseFolderPath & clientName
    
    ' ヘルパー関数を呼び出してフォルダを安全に作成
    If CreateFolderRecursive(fullFolderPath) Then
        MsgBox "顧客フォルダ '" & fullFolderPath & "' の作成または存在を確認しました!", vbInformation
    Else
        MsgBox "顧客フォルダ '" & fullFolderPath & "' の作成に失敗しました。詳細はメッセージを確認してください。", vbCritical
    End If
    
    ' さらに、顧客名を変えてテストしてみましょう
    ' Call CreateFolderRecursive(baseFolderPath & "Panasonic") ' 既に存在する場合のテスト
    ' Call CreateFolderRecursive(baseFolderPath & "新興商事\プロジェクトA") ' 複数階層のテスト
    ' Call CreateFolderRecursive("D:\テストフォルダ\新規顧客\ABC社") ' 別ドライブや複数階層のテスト
End Sub

この改良版コードを使えば、clientNameに「Sony」のような単純な顧客名だけでなく、「新規事業部\プロジェクトX」のような複数階層のパスを指定しても、VBAが自動で必要なフォルダ構造を構築してくれます。もう手作業でのフォルダ作成ミスや時間のロスに悩まされることはありません!

3. まとめ

いかがでしたでしょうか?VBAのMkDir関数を活用することで、新規顧客の登録時などに発生する手作業でのフォルダ作成から完全に解放されます。今回ご紹介した堅牢なコードをあなたの業務に組み込めば、フォルダ管理のストレスが減り、本来の営業活動にもっと集中できるようになるはずです!

ぜひこのVBAコードをあなたのExcel業務に導入し、日々の営業活動をもっと効率的でスマートなものに変えていきましょう。さらに応用すれば、フォルダ作成と同時に定型ファイルをコピーする、といった自動化も可能です。

VBAでの業務効率化、悩み解決します

「このマクロ、もっと速くならないかな?」「エラーが消えない…」
Access/VBA専門のwanna.jpにご相談ください。

無料相談はこちら