エクセルVBAで「ブックを開く」Openメソッドについて解説します。
マクロ作成時にもよく使う「ブックを開く」作業のコードバリエーションです。是非知っておきましょう。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルVBAでワークブックを開く方法として「Openメソッド」があります。
業務でのエクセル資料作成においては、複数のエクセルブックにあるデータを使って作業を進めることも多いです。
そんな作業をVBAコードで表現し自動処理をするときは、「Openメソッド」を利用する方法を知っておくと便利です。
- ブックの知識
- ブックの操作
- ワークブックを開くOpenメソッドの書き方 Excelマクロ
- VBA ブック名の取得法4つの解決策を詳しく解説
- VBA 開く,保存,閉じる,作成,削除 ブックの存在確認後のコード記述
- ファイルの保存に年月日+時刻を付けて管理する
- VBA 保存先フォルダをダイアログ指定で変数化
- 新規ブック5つの保存法。AddとSaveAsの使い方がわかる
- セル値を使いブック名として保存。統一フォームに有用
- VBA シートをブックから切り出し名付け保存する
- ブック名に作成者名を付加。 プロパティ変更とファイル保存
- 不要フォルダを削除する2種類のコードの作成
- 要らないファイルを自動削除するコードの作成
- ワークブックを閉じる12のパターン使い分け VBA最速理解
- ピンポイントでファイルを完全に削除するマクロ(コピペ可)
コンテンツ
Openメソッドの使い方
ワークブックを開く「Openメソッド」は、「Workbooksコレクション」に対して使用します。
「Workbooksコレクション」とは「Workbookオブジェクト」の集まり、つまり、今開かれているワークブックの集まりです。
ワークブックを開くVBAコードの記述構文
Workbooks.Open FileName
Workbooksは、Workbooksコレクションを表します。
FileNameは、ファイル名(ブック名)のフルパスになります。
例えば、”C:¥Users¥(ユーザー名)¥Documents¥NewFolder¥Book1.xlsx” とか
ドライブ名から始まるアドレスです。
つまり、表記するとこのようになります。
Workbooks.Open FileName:=”C:¥Users¥(ユーザー名)¥Documents¥NewFolder¥Book1.xlsx”
引数の表記方法は、FileName:=”C:¥Users¥(ユーザー名)¥Documents¥NewFolder¥Book1.xlsx”という
「名前付き引数」表記でもいいですし、
”C:¥Users¥(ユーザー名)¥Documents¥NewFolder¥Book1.xlsx”という
引数名を省略した「引数の値」表記でも大丈夫です。
ただし引数の指定種類数が多くなると、非常に見ずらいコード記述になりますので、使い分けが必要です。
ちなみに、Setステートメントを使ってオブジェクト変数とする場合の表記方法は、
FileNameを括弧()で囲む必要があります。
Set Wb = Workbooks.Open _
(“C:\Users\(ユーザー名)\Documents\NewFolder\Book1.xlsx”)
間違いやすい記述(この書き方では開けない)
Openメソッドは、Workbooksコレクションに対して使用すると説明しましたが、慣れない内は、ついついやってしまいます。
一見非常にまともな記述に見えますが、Openメソッドは、Workbookオブジェクトには使えませんので承知しておきましょう。
Sub Book1を開く()
Workbooks("Book1.xlsx").Open
End Sub
場所を指定してワークブックを開く
構文の項目でも説明しましたが、Openメソッドには開きたいワークブックのフルパスが必要です。
パスを表示する方法として、絶対パスと相対パスがあります。
ブックを指定する絶対パスと相対パス記述のコツ絶対パスは、ドライブ名から記述したパスです。最も確実な間違いのない指定方法です。
C:¥Users¥(ユーザー名)¥Documents¥NewFolder¥Book1.xlsx
Sub Book1を開く1()
Workbooks.Open "C:\Users\CONTR\Documents\NewFolder\Book1.xlsx"
End Sub
デメリットとしては、
この記述方法だと、Openメソッドを使用するコードが書かれたVBAを、他のクライアントPCに移植しても動かないことの方が多くなります。
導入先のPCで、このVBAが書かれたエクセルファイルをどこに設置しようとも、必ず(と言っていいほど)絶対パスが一致することがないからです。
他のPCに移植した場合など、そのPCのフォルダ構成が不明な時は相対パスで記述します。
ケース的には、このOpenメソッドの書かれたVBAが記述されたエクセルブックが、設置された場所(パス)を起点にすることが多いです。
「Workbookオブジェクト.Path」で戻り値としてそのエクセルブックがあるフォルダまでのパスを取得することが出来ます。
たとえば、C:¥Users¥(ユーザー名)¥Documents¥NewFolder¥Book1.xlsm について
ThisWorkbook.Path を実行すると戻り値は、
C:¥Users¥(ユーザー名)¥Documents¥NewFolder となります。
なので、「Book1.xlsm」と同じフォルダにある「Book1.xlsx」を開くVBAコードは次のように記述できます。
Sub Book1を開く2()
Workbooks.Open ThisWorkbook.Path & "\Book1.xlsx"
End Sub
カレントフォルダのブックを開く
カレントフォルダとは、現在選択されているフォルダのことです。
なので、「カレントフォルダのブックを開く」とは現在選択されているフォルダにあるブックを開くという事になります。
当然、指定するブックがカレントフォルダになければ開くことが出来ません。
記述方法は、このようになります。つまり、FileNameがブック名だけ(パスを書かないこと)でカレントフォルダだと指定することになります。
Sub Book1を開く3()
Workbooks.Open "Book1.xlsx"
End Sub
カレントフォルダは、フォルダ操作することで簡単に変更されてしまいます。今、カレントフォルダがどこにあるのかを知るには、次のVBAコードを実行することでチェックすることが出来ます。
「CurDirプロパティ」を使って今のカレントフォルダはどこなのかを知ることが出来ます。
エクセルのデフォルトでは、ブックを開いた当初は「(ログインアカウントの)マイドキュメント」になっています。
Sub Book1を開く4()
MsgBox CurDir
End Sub
カレントフォルダからの開き方で、任意のフォルダにあるエクセルブックを開きたい場合は、Openメソッドを実行する前に「カレントフォルダを変更」する必要があります。
カレントフォルダを変更するには、「ChDirステートメント」を使用します。
次のコードでは、ChDirステートメントでカレントフォルダを変更します。チェックとしてメッセージボックスで変更を確認しています。その後、変更されたカレントフォルダにある「Book1.xlsx」ブックが開かれます。
Sub Book1を開く5()
ChDir "C:\Users\(ユーザー名)\Documents\NewFolder"
MsgBox CurDir
Workbooks.Open "Book1.xlsx"
End Sub
引数を使ってワークブックを開く
Openメソッドにはいろいろな引数が準備されています。
頻度の少ないものも含めると10種以上になります。
その中での「読み取り専用で開く」「読み取りパスワードで開く」「書き込み可能パスワードで開く」についてです。
ワークブックを読み取り専用で開くにはTrueを指定します。省略時はFalseになります。
ReadOnly:=True
読み取りパスワードで保護されているワークブックを開く場合は、読み取りパスワードを指定します。
Password:=”読取りパスワード”
Sub Book1を開く6()
Workbooks.Open _
Filename:="C:\Users\CONTR\Documents\NewFolder\Book1.xlsx", _
ReadOnly:=True, Password:="ROCK"
End Sub
書き込み保護されたワークブックに書き込みを許可するパスワードを指定します。 この引数を省略し、ワークブックが書込み保護されている時は、パスワード入力のダイアログ ボックスが表示されます。
WriteResPassword:=”書込みパスワード”
Sub Book1を開く7()
Workbooks.Open _
Filename:="C:\Users\CONTR\Documents\NewFolder\Book1.xlsx", _
WriteResPassword:="ROCK"
End Sub
ダイアログボックスから開く
エクセルに備え付けられた「『ファイルを開く』ダイアロブボックス」を呼び出して、ワークブックを開く方法もあります。
次のVBAコードでは、「『ファイルを開く』ダイアロブボックス」を開いて、「OK」ボタンで目的のワークブックを開く。「キャンセルボタン」では、メッセージで「キャンセルされた」と表示してプロシージャーを終了します。
開かれたブックは、「アクティブ状態」なので「ActiveWorkbook」オブジェクトでブック名やパスを取得する、あるいは、変数名を付けてSetステートメントでオブジェクト変数として格納することも出来ます。
Sub Book1を開く8()
Dim ABPath As String
Dim Flag As Boolean
Flag = Application.Dialogs(xlDialogOpen).Show
If Flag = False Then
MsgBox "キャンセルされました"
Exit Sub
End If
ABPath = ActiveWorkbook.Path
MsgBox ABPath
End Sub
まとめ
ブックを開く操作はいくつかのパターンがあります。そしてまた、VBAコードを作成する上では、重要な操作にもなりますので是非慣れておくようにしましょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。