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関数は非常にシンプルで使いやすい反面、実務で使う際にはいくつか注意すべき「落とし穴」があります。
⚠️ MkDir関数の落とし穴
- 親フォルダが存在しないとエラー: 例えば、"C:\営業データ\新規顧客\ソニー" というフォルダを作ろうとして、"C:\営業データ\新規顧客" が存在しない場合、エラーが発生してしまいます。
- 既にフォルダがあるとエラー: 全く同じパスのフォルダが既に存在する場合も、エラーが発生して処理が中断されてしまいます。
これらの問題は、VBA初心者の方が陥りやすいポイントです。
ご安心ください。これらの落とし穴をスマートに回避し、どのような状況でも確実にフォルダを作成するための、堅牢なコードをご紹介します。このコードは、まずフォルダが存在するかどうかを確認し、さらに、必要な親フォルダも自動的に作成する機能を備えています。
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業務に導入し、日々の営業活動をもっと効率的でスマートなものに変えていきましょう。さらに応用すれば、フォルダ作成と同時に定型ファイルをコピーする、といった自動化も可能です。