【Excel VBA】カレントフォルダ(CurDir)の取得と、その注意点

VBAでファイルを扱う際、現在の作業フォルダ、すなわち**「カレントフォルダ」**を基準に操作したい場合があります。例えば、パスを指定せずにファイル名だけで保存した場合、そのファイルはカレントフォルダに保存されます。

VBAには、このカレントフォルダを取得するためのCurDirという関数が用意されています。しかし、この関数の挙動には注意が必要で、多くの場合、より安全な代替手段が存在します。

この記事では、CurDir関数の使い方と、実務で使う際に必ず知っておくべき注意点を解説します。


目次

完成したVBAコードと、その動作

以下のコードは、現在のカレントフォルダを表示し、その後、パスを指定せずに新しいブックを保存するものです。

Sub CheckCurrentDirectory()

    ' 変数を宣言します
    Dim currentFolderPath As String
    Dim newBook As Workbook
    
    ' --- 1. 現在のカレントフォルダを取得して表示 ---
    currentFolderPath = CurDir
    MsgBox "現在のカレントフォルダは以下です:" & vbCrLf & currentFolderPath
    
    ' --- 2. パスを指定せずにブックを保存 ---
    ' 新しいブックを追加
    Set newBook = Workbooks.Add
    ' ファイル名だけで保存すると、カレントフォルダに保存される
    newBook.SaveAs "NewFile_In_CurDir.xlsx"
    
    ' --- 3. 保存したブックを閉じる ---
    newBook.Close
    
    MsgBox "「" & currentFolderPath & "」に" & vbCrLf & _
           "「NewFile_In_CurDir.xlsx」を保存しました。"

End Sub

このマクロを実行すると、まずメッセージボックスにカレントフォルダが表示されます。そして、そのフォルダ内にNewFile_In_CurDir.xlsxという名前の新しいExcelファイルが作成されているはずです。


【最重要】 CurDirThisWorkbook.Path の決定的な違い

CurDirを使う上で最も重要な注意点は、その指し示すフォルダが、必ずしもマクロが書かれているブックのフォルダと一致するとは限らないという点です。

プロパティ/関数示す場所信頼性主な用途
CurDirExcelアプリケーションの現在の作業フォルダ低い(変わりやすい)特殊なケースのみ。通常は非推奨。
ThisWorkbook.Pathマクロが書かれているブックの保存フォルダ高い(不変)ファイル入出力の基準パスとして強く推奨

CurDirが指すフォルダは、以下のような操作で簡単に変わってしまいます。

  • ユーザーが「ファイルを開く」や「名前を付けて保存」ダイアログで別のフォルダに移動した。
  • VBAのChDirステートメントで変更された。

そのため、マクロの実行タイミングによってCurDirがどこを指しているか分からなくなり、意図しない場所にファイルが保存されたり、「ファイルが見つからない」というエラーの原因になったりします。


まとめ

  • **CurDir**は、Excelの現在の作業フォルダを取得する関数です。
  • パスを指定せずに**SaveAs "ファイル名"**を実行すると、CurDirが指すフォルダに保存されます。
  • CurDirはユーザーの操作などで簡単に変化するため、信頼性が低いです。

結論として、マクロブックと同じフォルダを基準にファイルを操作したい場合は、CurDirを使うのではなく、常にThisWorkbook.Pathを使いましょう。

myPath = ThisWorkbook.Path & "\NewFile.xlsx"

この書き方を徹底することで、マクロの実行環境に左右されない、安定したファイル操作が可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次