Excel VBA_ブックを開く方法について
この記事ではVBAでブックを開く方法についてまとめます。ブックを扱う上で「開く」という処理は最も基本的なモノですが注意すべき点がいくつかあります。基本的なブックの開き方をマスターしていきましょう。
場所と名前
まずブックを指定するには2つの情報が必要となります。場所と名前です。 ブック名についてはそのまま名前を入力すればOKですが、場所を指定するには少し工夫が必要となります。
デスクトップ上:sample
というフォルダの中にあるsample1.xlsm
最終的にはデスクトップ上にあるsample1.xlsm
というブックを下記のような形で開くことが目標となります(\
(バックスラッシュ)の記号は¥
に置き換えて考えて下さい。)
Workbooks.Open "C:\Users\masah\Desktop\sample\sample1.xlsm"
Workbooks.Open Filename:="C:\Users\masah\Desktop\sample\sample1.xlsm"
Workbooks.Open ThisWorkbook.Path & "\sample1.xlsm"
Workbooks.Open Filename:=ThisWorkbook.Path & "\sample1.xlsm"
場所と名前を指定する方法
ここからは対象のブックを指定するために必要となる、場所と名前の具体的な指定方法を見ていきます。
ブックの名前を指定
まずはカンタンなブックの名前を指定する方法から見ていきましょう。ブック名を指定するには2つの方法があります。1つが名前、もう1つが番号を使った方法です。
番号を使った方法では最後に開いたモノが1番に指定されますが、どのブックが最初(最後)に開かれたか?を考えながら操作対象を指定するのは面倒です。ブック名を指定する場合はそのままブック名を使ってしまいましょう。
ブックの場所を指定
問題となるのがブックの場所を指定する場合です。主に2つの方法があります。
- パスを指定する方法
- 実行中のマクロが記述されているブックを取得する方法
それぞれの方法を詳しく見ていきましょう。
パスを指定する方法
ブックがあるパスをそのままベタ書きで指定する方法です。C:\Users\masah\Desktop\sample\sample1.xlsm
のようにパスとブック名を指定することになります。中でもパスを調べるには主に2つの方法を使います。
- フォルダ上部から調べる方法
- プロパティを使った方法
フォルダ上部から調べる方法
まず最もカンタンなのがフォルダ上部から調べる方法です。ブックが入っているこちらの上部をクリックすると正確なパスが表示されます。こちらをコピペしてそのままマクロへと貼り付けます。
プロパティを使った方法
基本的にはフォルダ上部から調べればOKですが、きちんと正確に場所を調べたい場合にはプロパティからも調べることができます。調べたいブックを右クリックしてプロパティ
を選択します。
するとブックに関する詳細情報が表示されます。全般
タブの中にある場所:
という項目が、そのブックが存在するフォルダのパスになります。
実行中のマクロが記述されているブックを取得
パスを指定する方法は正確ですが欠点がいくつかあります。
- 一々パスを調べて指定するのが面倒
- ブックがある場所(パス)は変わる可能性がある
- 柔軟にマクロを設計できない
ThisWorkbook.Path
絶対パスのような面倒なことをせずともパスを取得するにはThisWorkbook.Path
を用います。正確には ThisWorkbookプロパティ、Pathプロパティ の2つのプロパティを組み合わせます。
ThisWorkbook
' 実行中のマクロが記載されているブックを取得
Workbookオブジェクト.Path
' ブックが保存されているフォルダの絶対パスを取得
ThisWorkbookプロパティを使うと実行中のマクロが記載されているブックを取得できます。更にそこへPathプロパティを組み合わせることで、フォルダの絶対パスを取得することができます。
例えば下記のコードを実行するとデスクトップ上のフォルダの中にあるsample1.xlsm
のパスを取得できます。
Range("B2").Value = ThisWorkbook.Path
パスの情報を取得できる
これによってマクロVBAの書かれているファイルが入っているフォルダを指定することができます。
実行中のマクロブックを起点に指定
Openメソッド、ThisWorkbookプロパティ、Pathプロパティの3つを組み合わせてブックを開いていきましょう。下記ではデスクトップ上のフォルダ1
の中にあるsample1.xlsm
を開いています。
Workbooks.Open ThisWorkbook.Path & "\sample1.xlsm"
文字列連結演算子&
によって2つの文字列をつなげている点に注目して下さい。フォルダ名の前には\
(バックスラッシュもしくは円記号)を忘れずに入れておきましょう。
Openメソッド
Workbooksコレクションに対してOpenメソッドを使うと、既存のブックを開くことができます。引数Filename
の部分にはブックの場所と名前を指定します。
Workbookコレクション.Open(Filename)
Openメソッドへの引数には通常ファイル名を指定することがほとんどです。しかし引数によって読み取り専用ブックやパスワードで保護されたブックを開くこともできます。
expression.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
Microsoft公式でも解説されていますので、こちらも時間のある時に目を通しておきましょう。
新規作成したブックを正しく扱うには
ブックを新規で作成直後に扱うにはどうすれば良いのでしょうか。ブックを新規で作成した場合、その新規作成されたブックがアクティブなモノとしてみなされます。そこで通常はActiveWorkbook
によって新規作成したブックを扱うことがあります。
Workbooks.Add
With ActiveWorkbook
' 新規作成直後の処理内容
End With
しかし複数のブックを行き来しているとActiveなブックが変更されてしまう可能性もあります。そこでオブジェクト変数に新規作成したブックを代入することで、正確に操作対象のブックを指定することができます。
Dim 操作対象のブック As Workbook
' 新規作成したブックを変数へそのまま格納
Set 操作対象のブック = Workbooks.Add
With 操作対象のブック
' 新規作成直後の処理内容
End With
VBAでオブジェクトを扱う場合、オブジェクト変数を使うことで処理を確実に行うことができます。こちらのテクニックも併せて覚えておきましょう。
Discussion