Excel VBA CurDir関数|現在のディレクトリを取得・変更するコード

 

Excel VBA カレントディレクトリは、現在の作業ディレクトリ(フォルダ)のことを指します。ExcelVBAでファイルの操作を行う際に、現在のディレクトリを取得したり変更したりするために使用されます。具体的な使い方や、注意点やサンプルコードを紹介します。

 

📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!

👇実務で“そのまま使える”テンプレ付きで、コピペするだけ
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き

 

CurDir関数とは?Excel VBAでカレントディレクトリを使う場面

 

以下のようなシーンで利用されます。

 

・ファイルを開いたり保存したりする際に、現在の作業ディレクトリを確認する

・複数のファイルを一括処理するために、特定のディレクトリに移動する

・作業ディレクトリを一時的に変更し、操作が終わったら元に戻す

CurDir関数の構文と使い方|基本・引数・注意点

カレントディレクトリの取得や変更には、ChDir(Change Directory)関数を使用します。また、CurDir関数を使用して現在のディレクトリを取得します。

CurDirを使うメリット

 

・ファイル操作のミスを防ぐ
意図しないフォルダで処理を行うリスクを軽減できます。

 

・動的なファイルパス管理が可能
カレントディレクトリを取得し、コードの汎用性を高められます。

 

構文と引数

 

構文と引数

Dim path As String
path = CurDir

・CurDir関数にはオプション引数としてドライブ指定が可能です。

Dim path As String

・path = CurDir("C") ' Cドライブのカレントディレクトリを取得

 

簡単なコード例

 

  1. Sub GetCurrentDirectory()
  2.     MsgBox "現在のカレントディレクトリ: " & CurDir
  3. End Sub
Cドライブのカレントディレクトリを取得する
  1. Option Explicit
  2. Sub GetSpecificDrive()
  3.     MsgBox "Cドライブのカレントディレクトリ: " & CurDir("C")
  4. End Sub

 

ChDir関数との組み合わせによるディレクトリ操作

  1. Option Explicit
  2. Sub ChangeDirectory()
  3.     ChDir "C:\Users\User\Desktop"
  4.     MsgBox "変更後のカレントディレクトリ: " & CurDir
  5. End Sub

自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。

👉無料ExcelVBAベーシック選択問題138問

よくある注意点

 

存在しないディレクトリを指定した場合の挙動

CurDirは存在しないフォルダを指定するとエラーになります。エラーハンドリングを行うことで、プログラムの強度を向上させることができます。

 

  1. Option Explicit
  2. Sub CheckDirectory()
  3.     On Error Resume Next
  4.     MsgBox CurDir("Z") ' 存在しないZドライブを指定
  5.     If Err.Number <> 0 Then
  6.         MsgBox "エラー発生: " & Err.Description
  7.     End If
  8.     On Error GoTo 0
  9. End Sub

 

マルチユーザー環境での注意事項

異なるユーザーが同じVBAコードを使用する場合、カレントディレクトリが異なる可能性があるため、適宜設定を確認する必要があります。

 

ポイント

・ディレクトリパスを変更する際には、存在するディレクトリかどうかを確認する必要があります。

・カレントディレクトリが変更されると、ファイル操作に影響を与えることがありますので注意が必要です。

【サンプルコード】カレントディレクトリを取得・変更する実践例

 

現在のディレクトリを取得する

 

  1. Option Explicit
  2. Sub GetCurrentDirectory()
  3.     ' カレントディレクトリを取得して表示
  4.     Dim currentDir As String
  5.     currentDir = CurDir
  6.     MsgBox "現在のカレントディレクトリは: " & currentDir
  7. End Sub

 

自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。

👉無料ExcelVBAベーシック選択問題138問

 

ディレクトリを別の場所に変更する

 

  1. Option Explicit
  2. Sub ChangeCurrentDirectory()
  3.     ' 新しいディレクトリに変更
  4.     Dim newDir As String
  5.     newDir = "C:\ExampleDirectory"
  6.     
  7.     ' ディレクトリが存在するか確認
  8.     If Dir(newDir, vbDirectory) <> "" Then
  9.         ChDir newDir
  10.         MsgBox "カレントディレクトリが " & newDir & " に変更されました"
  11.     Else
  12.         MsgBox "ディレクトリが存在しません"
  13.     End If
  14. End Sub

 

元に戻すコード

  1. Option Explicit
  2. Sub ChangeAndRevertCurrentDirectory()
  3.     ' 現在のディレクトリを取得
  4.     Dim originalDir As String
  5.     originalDir = CurDir
  6.     
  7.     ' 新しいディレクトリに変更
  8.     Dim newDir As String
  9.     newDir = "C:\ExampleDirectory"
  10.     
  11.     If Dir(newDir, vbDirectory) <> "" Then
  12.         ChDir newDir
  13.         MsgBox "カレントディレクトリが " & newDir & " に変更されました"
  14.         
  15.         ' 作業終了後に元のディレクトリに戻す
  16.         ChDir originalDir
  17.         MsgBox "カレントディレクトリが元に戻されました: " & originalDir
  18.     Else
  19.         MsgBox "ディレクトリが存在しません"
  20.     End If
  21. End Sub

 

応用:複数ファイル処理・バックアップ処理に応用

 

複数ファイルの一括処理

  1. Option Explicit
  2. Sub ProcessFiles()
  3.     Dim fso As Object, folderPath As String, file As Object
  4.     Set fso = CreateObject("Scripting.FileSystemObject")
  5.     folderPath = CurDir
  6.     For Each file In fso.GetFolder(folderPath).Files
  7.         Debug.Print file.Name
  8.     Next file
  9. End Sub

 

自動バックアップの実装

  1. Option Explicit
  2. Sub BackupFile()
  3.     Dim fso As Object
  4.     Set fso = CreateObject("Scripting.FileSystemObject")
  5.     fso.CopyFile CurDir & "\外部ファイル-1.xlsx", CurDir & "\backup\外部ファイル-1.xlsx"
  6.     MsgBox "バックアップ完了"
  7. End Sub

 

Dirでパスが見つからないエラーが出た時の対処

 

  1. Option Explicit
  2. Sub CheckFolderExists()
  3.     Dim fso As Object
  4.     Set fso = CreateObject("Scripting.FileSystemObject")
  5.     If fso.FolderExists("C:\Users\User\Desktop\新しいフォルダー") Then
  6.         MsgBox "フォルダが存在します"
  7.     Else
  8.         MsgBox "フォルダが見つかりません"
  9.     End If
  10. End Sub

 

アクセス許可に関する問題の解決

セキュリティ設定によっては、特定のディレクトリにアクセスできない場合があります。このような場合、管理者権限で実行するか、アクセス権を確認してください。

 

カレントディレクトリは、ファイル操作を行う際に重要な概念です。ExcelVBAでの作業を効率化するために、現在のディレクトリを取得したり変更したりする方法を理解しておくことは非常に役立ちます。初心者でも簡単に扱えるように、基本的な使い方をマスターしておきましょう。

 

CurDir関数の利用は、業務効率化に大きく貢献します。

 

DIRの関連記事はここをクリックで一覧表示します

 

Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。

👉無料ExcelVBAベーシック選択問題138問