wanna.jp VBAリファレンス
Top > VBA関数リファレンス > 【VBA】ChDirでデフォルト保存先を自由自在に変更!ファイルダイアログの初期フォルダ設定も完璧に

【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を併用した安全なカレントディレクトリ変更コード

以下のコードは、指定されたパスのドライブを自動的に判別し、ChDriveChDir を併用して、完璧にカレントディレクトリを変更します。

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コードに取り入れて、快適な自動化ライフを実現してください!

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

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

無料相談はこちら