wanna.jp VBAリファレンス
Top > VBA関数リファレンス > VBA CurDirの使い方

VBA CurDirでOSの現在パスを正確に取得する方法と、ThisWorkbook.Pathとの決定的な違い

VBA開発を進める中で、「なぜかファイルが見つからない」「相対パスで指定した画像が読み込まれない」といった問題に直面したことはありませんか? その原因の一つに、OSが認識する現在のカレントディレクトリ(現在パス)と、Excelブックが保存されているパスを混同しているケースが挙げられます。本記事では、VBAの CurDir 関数を使ってOSの現在パスを正確に取得する方法と、開発者が陥りがちな誤解を解消し、堅牢なアプリケーションを構築するための知識を提供します。

実務で役立つ!CurDir関数の基本コード

CurDir 関数は引数を取らず、非常にシンプルに現在のカレントディレクトリのパスを文字列で返します。以下のコードをコピー&ペーストして、すぐに実行結果を確認してみてください。

Sub GetCurrentSystemPath()
    Dim currentOSPath As String
    
    ' CurDir関数でOSの現在のカレントディレクトリを取得
    currentOSPath = CurDir()
    
    ' 結果を表示
    MsgBox "現在のOSカレントディレクトリ: " & currentOSPath, vbInformation, "CurDir関数によるパス取得"
    Debug.Print "現在のOSカレントディレクトリ: " & currentOSPath
    
    ' (参考)特定のドライブのカレントディレクトリを取得する場合
    ' 例: Cドライブのカレントディレクトリ
    Dim cDrivePath As String
    cDrivePath = CurDir("C")
    Debug.Print "Cドライブのカレントディレクトリ: " & cDrivePath
End Sub

このコードを実行すると、メッセージボックスとイミディエイトウィンドウ(Ctrl + G で表示)に、現在OSが認識しているカレントディレクトリのパスが表示されます。このパスは、エクスプローラーのアドレスバーに表示されているパスと一致しない場合があることに注目してください。

【重要】CurDirとThisWorkbook.Pathの決定的な違いとバグ防止策

まとめ

VBAの CurDir 関数は、OSのカレントディレクトリを取得するための重要なツールです。しかし、その利用においては、Excelブックのパス (ThisWorkbook.Path) との明確な違いを理解することが不可欠です。この違いを正しく認識し、適切なパス取得方法を選択することで、相対パスに関するバグを未然に防ぎ、より堅牢で信頼性の高いVBAアプリケーションを開発することができます。

「どこにあるべきか」を正確に指定する意識を持つことで、あなたのVBAコードはさらに安定し、メンテナンスしやすくなるでしょう。

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

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

無料相談はこちら