オーロラさんの勉強帳

33歳、未経験からIT業界へ。SESのロースキル客先常駐勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。

VBA 再入門35 Openメソッド ブックを開く

目次


※本記事の「\」は半角の「¥」のことです。

Openメソッド

ブックを開くにはWorkbooksコレクションのOpenメソッドを使用します。Openメソッドにはたくさんの引数がありますが、この記事では開くブックを指定するFilenameのみ説明いたします。


Openメソッドの書式

Workbooks.Open Filename := "ブックのフルパス"

ブックがカレントフォルダにある場合は、Filenameにブック名だけ指定することもできます。

カレントフォルダのブックを開く場合

ファイル名の指定だけで開くことができます。

Sub sampleOpen()
'ファイル名だけの指定
    Workbooks.Open Filename:="B.xlsx"
End Sub

カレントフォルダとは、現在の作業対象になっているフォルダのことです。[別名で保存]ダイアログで表示されているフォルダがカレントフォルダになります。
カレントフォルダはあくまで現在、作業対象のフォルダであってマクロのブックと同じ階層という意味ではありません。

カレントフォルダの簡単な確認方法

VBE画面のイミディエイトウィンドウで「Debug.Print CurDir」と入力してEnterを押すとカレントフォルダを表示することができます。
※イミディエイトウィンドウはVBE画面から「Ctrl」+「G」のショートカットで表示することができます。

Debug.Print CurDir

f:id:auroralights:20210126233527p:plain

カレントフォルダの注意点

カレントフォルダは意図しない操作で切り替わります。
例えば「名前を付けて保存」でカレントフォルダでないフォルダ(A)内に別のフォルダ(B)を作成した場合は、フォルダを作成したフォルダ(A)がカレントフォルダとなります。

f:id:auroralights:20210126234142p:plain
画像の場合はsubフォルダがカレントフォルダになります。

ブック名だけで指定した場合、カレントフォルダが意図しない操作で切り替わる可能性があるので、開くブックを取得するコードを記載するか、フルパスで指定する方が安全かもしれません。

カレントフォルダ以外のブックを開く場合

Filenameにブックのフルパスを指定しています。

Sub sampleOpen()
'フルパスでのブックの指定
    Workbooks.Open Filename:="C:\test\tmp\sub\C.xlsx"
End Sub

ThisWorkbook.Pathを使ってブックを指定する場合

コードを書いたブックと同フォルダにオープンしたいブックがある場合は、以下のように記述することもできます。

Sub sampleOpen3()
'--ThisWorkbook.Pathを使う方法
    Workbooks.Open Filename:=ThisWorkbook.Path & "\B.xlsx"
End Sub

ThisWorkbook.PathでVBAのコードが書かれたブックまでのパスを取得し、「& "\ブック名"」とすることで、同じフォルダの別ブックを指定しています。