エクセルVBAのコード組み立てで、カレントフォルダを変更する必要がある場合があります。
そしてそれを簡単に変更できるものがChDirステートメントです。
ChDirの実際に則した使い方を説明します。
エクセルVBAのステートメントで「ChDir(チェインジディレクトリ)」というのがあります。
少々地味感のあるステートメントですが、この使い方のポイントを説明いたします。
こんにちは、じゅんぱ店長(@junpa33)です。
コンテンツ
エクセルVBA カレントフォルダを
簡単に変更できるChDirの使い方
ChDirステートメントはカレントフォルダを変更したいときに使います。
カレントフォルダというのは、今作業しているフォルダのことです。
ChDirステートメントの記述方法は
記述方法は
ChDir (Path)
極々簡単な記述方法です。
今回のChDirのサンプル
想定するサンプルは、
VBAコードの記述しているエクセルBOOKのデータの保存について、
新しくエクセルBOOKを作成し、名前を付けて別の保存フォルダで保存します。
保存終了後に再度そのエクセルBOOKを開き、シート名とセルにデータを書き込みます。
普通のエクセル作業の通り、エクセルVBAがあるBOOKの保存フォルダを開いて、エクセルBOOKを起動します。

ChDirを使うための周辺知識
このエクセルVBAコードが記述されているエクセルBOOKのフルパスを取得する方法はこの通りです。
'このBOOKの絶対パスを代入 aPath = ThisWorkbook.Path
よくご存じの方も多いと思います。
今回のサンプルの設定では、
「VBAChDir」フォルダの1つ下の階層に「ChDirサンプル」(このエクセルVBAのBOOK)と「ファイル移動先」のフォルダが設定されています。
VBAで作成する保存ファイルは「ファイル移動先」内に保存されます。
「ファイル移動先」のフルパスを入手するためには、一旦「VBAChDir」のパスを取得する必要があります。
'この絶対パスで一つ上のホルダパスまでの表示文字数 aPCo = InStrRev(aPath, "\") 'データの移送先フォルダの絶対パスを代入 bPath = Left(aPath, aPCo) & "ファイル移動先\"
この様にするとお隣のフォルダパスを取得することが出来ます。
InStrRev関数の使い方についてはこちらを参考にしてください。

Left関数についてはこちらを参考にしてください。

Left関数についてはこちらを参考にしてください。

ChDirを使わない時のコード記述のエラー
この様なサンプルのシチュエーションの時に ” スルッと見逃してしまいそうになるミス ” があります。
特に、エクセルVBAコードの組み立て作業中で、フォルダディレクトリが「あっちへ行ったりこっちに来たり」している時は、その条件によってはエラーを見逃してしまうこともあります。
そして、完成後いざ使ってみた時にエラーストップしてしまうのです。
「そのファイルディレクトリには、そのファイルが無い」ことでエラーになります。
一見問題なさそうですが・・・
Sub ChDirテスト1() Dim vala, valb, valc Dim aPath As String, bPath As String Dim aPCo As Long Workbooks("VBAChDir説明.xlsm").Activate Worksheets("Sheet1").Select vala = Range("A1").Value valb = Range("A3").Value valc = Range("A5").Value 'このBOOKの絶対パスを代入 aPath = ThisWorkbook.Path 'この絶対パスで一つ上のホルダパスまでの表示文字数 aPCo = InStrRev(aPath, "\") 'データの移送先フォルダの絶対パスを代入 bPath = Left(aPath, aPCo) & "ファイル移動先\" '新しいWorkbookを作成します Workbooks.Add '作成したWorkbookを名前を付けて、移動先フォルダに保存します ActiveWorkbook.SaveAs Filename:=bPath & vala & ".xlsx" 'このWorkbookを上書き保存します ActiveWorkbook.Close savechanges:=True Workbooks.Open Filename:=vala & ".xlsx" Worksheets("Sheet1").Name = valb Range("C5").Value = valc End Sub
実行結果
新規作成で名前を付けて一度保存終了したエクセルBOOKを再度開くところで、「ファイルが見つかりません。」とエラーになりました。
デバッグしてみると、一旦閉じてすぐに開こうとしているにもかかわらず、エラーが出ているのが分かります。
ChDirを使った正しいコード記述
Chdirを記述すればエラー解消します。
Sub ChDirテスト2() Dim vala, valb, valc Dim aPath As String, bPath As String Dim aPCo As Long Workbooks("VBAChDir説明.xlsm").Activate Worksheets("Sheet1").Select vala = Range("A1").Value valb = Range("A3").Value valc = Range("A5").Value 'このBOOKの絶対パスを代入 aPath = ThisWorkbook.Path 'この絶対パスで一つ上のホルダパスまでの表示文字数 aPCo = InStrRev(aPath, "\") 'データの移送先フォルダの絶対パスを代入 bPath = Left(aPath, aPCo) & "ファイル移動先\" '新しいWorkbookを作成します Workbooks.Add '作成したWorkbookを名前を付けて、移動先フォルダに保存します ActiveWorkbook.SaveAs Filename:=bPath & vala & ".xlsx" 'このWorkbookを上書き保存します ActiveWorkbook.Close savechanges:=True 'カレントディレクトリを移動します ChDir bPath Workbooks.Open Filename:=vala & ".xlsx" Worksheets("Sheet1").Name = valb Range("C5").Value = valc End Sub
実行結果
正常に完了しました。
「 ChDir bPath 」をエクセルBOOKを開くコードの前行に記述するだけです。
もちろんエクセルBOOKをフルパスで記述しても当然いい訳ですが、これの方が遥かに簡単にエラーを防ぐことが出来ます。
カレントフォルダを簡単に変更できるChDirのまとめ
エクセルVBAを使ってコードを組み立てて行く中で、必要ファイルをフォルダ間を行き来させる操作も多くあると思います。
違うフォルダ間を跨ぐ場合はChDirを使ってコード組み立てを行うといいと思います。
今あるディレクトリの場所も明示的に分かりますし、コード組み立ても簡単だと思います。
短期間でエクセルVBAの独学習得を目指したいなら
エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。
けれども、
出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。
独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。
先人が行った勉強方法をあなたがそのまま利用すればよいということです。
独習のための大切な7つのポイントは、上記記事にて解説しています。
独習によるVBA習得のキーワードは、
出来るだけ多くの実例に触れること!
です。
正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。
ハッキリ言って、
本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、
手っ取り早く短期間習得できるというのは間違いないでしょう。
このサイトでよく使うVBAのコードのトピックを纏めています。
今回の記事はここまでです。 最後までご覧いただき有難うございました。