【VBA】ChDirでデフォルト保存先を自由自在に変更!ファイルダイアログの初期フォルダ設定も完璧に
「VBAでファイルを保存するたび、毎回目的のフォルダを探すのが億劫…」「ファイル選択ダイアログを開いたら、いつも使わないフォルダが表示されてイライラする…」そんな経験はありませんか?
VBAで作業を自動化しているのに、ファイルパスの指定で手間取るのは非効率的ですよね。この記事では、VBAの ChDir 関数を使って、デフォルトの保存先(カレントディレクトリ)を自在に変更し、ファイル操作を劇的にスムーズにする方法を解説します。特に、ファイル選択ダイアログの初期表示フォルダを、ユーザーがよく使うフォルダに設定したい場合に非常に役立ちます!
コピペで即解決!ChDirを使った基本的なデフォルト保存先変更コード
まずは、最も基本的な ChDir の使い方から見ていきましょう。このコードをそのままVBAモジュールに貼り付けて実行すれば、カレントディレクトリが指定したパスに変更されます。
Sub ChangeDefaultSavePath_Basic()
' 現在のカレントディレクトリを表示し、変更前を確認
MsgBox "変更前のカレントディレクトリ: " & CurDir, vbInformation, "現在のパス"
' ★ここを変更!デフォルト保存したいフォルダのパスを指定
Const TARGET_FOLDER_PATH As String = "D:\Data"
' ChDir関数でカレントディレクトリを変更
ChDir TARGET_FOLDER_PATH
' 変更後のカレントディレクトリを表示し、変更後を確認
MsgBox "変更後のカレントディレクトリ: " & CurDir, vbInformation, "新しいパス"
' ヒント:この後にファイル保存ダイアログ(例: Application.GetSaveAsFilename)を開くと、
' TARGET_FOLDER_PATH が初期表示フォルダとして開かれます。
End Sub
上記コードの Const TARGET_FOLDER_PATH As String = "D:\Data" の部分を、あなたがデフォルトにしたいフォルダのパスに変更してください。ChDir を実行するだけで、そのVBAプロジェクトが認識するカレントディレクトリが変更され、その後のファイル操作(例えばファイル選択ダイアログ)で指定したパスが初期表示されるようになります。
【重要】ChDirの落とし穴!異なるドライブへの変更はChDriveを忘れずに
ChDir 関数は非常に便利ですが、一つ重要な落とし穴があります。それは、カレントディレクトリを変更するパスが、現在のドライブと異なるドライブを指定している場合です。
🚨 警告!ドライブ変更時は要注意 🚨
もし現在のカレントドライブが「C:」で、ChDir "D:\Data" と記述しても、カレントディレクトリは「D:\Data」に変わりますが、カレントドライブ自体は「C:」のままです。
この状態でファイルダイアログを開くと、依然としてCドライブのどこかが表示される可能性があります。正しくカレントドライブも変更するには、ChDrive 関数を併用する必要があります。
ChDriveを併用した安全なカレントディレクトリ変更コード
以下のコードは、指定されたパスのドライブを自動的に判別し、ChDrive と ChDir を併用して、完璧にカレントディレクトリを変更します。
Sub ChangeDefaultSavePath_WithDriveChange()
Const TARGET_FULL_PATH As String = "D:\Data" ' ★ここを変更!ターゲットのフルパス
Dim targetDrive As String
' 現在のカレントディレクトリを表示
MsgBox "変更前のカレントディレクトリ: " & CurDir & vbCrLf & _
"変更前のカレントドライブ: " & Left(CurDir, 1), vbInformation, "変更前情報"
' ドライブ名を抽出 (例: "D:\" または "D" を取得)
If InStr(TARGET_FULL_PATH, ":\") > 0 Then
targetDrive = Left(TARGET_FULL_PATH, InStr(TARGET_FULL_PATH, ":") - 1)
ElseIf InStr(TARGET_FULL_PATH, ":") > 0 Then ' ":" だけの場合 (例: "D:")
targetDrive = Left(TARGET_FULL_PATH, InStr(TARGET_FULL_PATH, ":") - 1)
Else ' ドライブ名がない場合(例: 相対パス)は処理しない
MsgBox "指定されたパス '" & TARGET_FULL_PATH & "' にはドライブ情報が含まれていません。", vbExclamation
Exit Sub
End If
' まずカレントドライブを変更
' 例外処理を追加し、ドライブが存在しない場合に対応
On Error Resume Next ' エラーが発生しても次の行に進む
ChDrive targetDrive & ":"
If Err.Number <> 0 Then
MsgBox "ドライブ '" & targetDrive & "' が存在しないか、アクセスできません。", vbCritical, "エラー"
Exit Sub
End If
On Error GoTo 0 ' エラーハンドリングを解除
' 次にカレントディレクトリを変更
ChDir TARGET_FULL_PATH
' 変更後のカレントディレクトリとドライブを表示
MsgBox "カレントドライブとカレントディレクトリが変更されました:" & vbCrLf & _
"カレントディレクトリ: " & CurDir & vbCrLf & _
"カレントドライブ: " & Left(CurDir, 1), vbInformation, "変更完了"
End Sub
このコードでは、まず TARGET_FULL_PATH からドライブ名を抽出し、ChDrive でカレントドライブを移動させます。その後に ChDir でディレクトリを変更することで、完全に意図したパスがカレントになり、ファイルダイアログも正しく初期表示されるようになります。エラー処理も加えているため、より堅牢です。
まとめ:ChDirとChDriveでVBAファイル操作を最適化しよう
この記事では、VBAの ChDir 関数を使って、ファイル選択ダイアログの初期表示フォルダや、デフォルトの保存先をコントロールする方法を詳しく解説しました。
特に、異なるドライブへカレントディレクトリを変更する際には、ChDrive 関数の併用が不可欠であることを理解いただけたでしょうか。このポイントを押さえておくことで、予期せぬ挙動に悩まされることがなくなります。
これらの知識を身につけることで、VBAでのファイル操作が格段にスムーズになり、日々の業務効率が大幅に向上することでしょう。ぜひご自身のVBAコードに取り入れて、快適な自動化ライフを実現してください!