ワークブックを開くOpenメソッドの書き方 Excelマクロ

vbabookopeneyecatch

エクセルVBAで「ブックを開く」Openメソッドについて解説します。
マクロ作成時にもよく使う「ブックを開く」作業のコードバリエーションです。是非知っておきましょう。


こんにちは、じゅんぱ店長(@junpa33)です。

エクセルVBAでワークブックを開く方法として「Openメソッド」があります。

業務でのエクセル資料作成においては、複数のエクセルブックにあるデータを使って作業を進めることも多いです。

そんな作業をVBAコードで表現し自動処理をするときは、「Openメソッド」を利用する方法を知っておくと便利です。

Openメソッドの使い方

vbabookopenp004

ワークブックを開く「Openメソッド」は、「Workbooksコレクション」に対して使用します。

「Workbooksコレクション」とは「Workbookオブジェクト」の集まり、つまり、今開かれているワークブックの集まりです。

ワークブックを開くVBAコードの記述構文

Openメソッドの構文

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オブジェクトには使えませんので承知しておきましょう。

VBAエラーなコード
Sub Book1を開く()
        Workbooks("Book1.xlsx").Open
End Sub

場所を指定してワークブックを開く

構文の項目でも説明しましたが、Openメソッドには開きたいワークブックのフルパスが必要です。

パスを表示する方法として、絶対パスと相対パスがあります。

vbabookspecifyeye ブックを指定する絶対パスと相対パス記述のコツ

絶対パス

絶対パスは、ドライブ名から記述したパスです。最も確実な間違いのない指定方法です。

C:¥Users¥(ユーザー名)¥Documents¥NewFolder¥Book1.xlsx

VBA
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コードは次のように記述できます。

VBA
Sub Book1を開く2()
        Workbooks.Open ThisWorkbook.Path & "\Book1.xlsx"
End Sub

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

カレントフォルダとは、現在選択されているフォルダのことです。

なので、「カレントフォルダのブックを開く」とは現在選択されているフォルダにあるブックを開くという事になります。

当然、指定するブックがカレントフォルダになければ開くことが出来ません。

記述方法は、このようになります。つまり、FileNameがブック名だけ(パスを書かないこと)でカレントフォルダだと指定することになります。

VBA
Sub Book1を開く3()
        Workbooks.Open "Book1.xlsx"
End Sub

カレントフォルダは、フォルダ操作することで簡単に変更されてしまいます。今、カレントフォルダがどこにあるのかを知るには、次のVBAコードを実行することでチェックすることが出来ます。

「CurDirプロパティ」を使って今のカレントフォルダはどこなのかを知ることが出来ます。

エクセルのデフォルトでは、ブックを開いた当初は「(ログインアカウントの)マイドキュメント」になっています。

VBA
Sub Book1を開く4()
        MsgBox CurDir
End Sub
vbabookopenp001
CurDirプロパティの実行

カレントフォルダからの開き方で、任意のフォルダにあるエクセルブックを開きたい場合は、Openメソッドを実行する前に「カレントフォルダを変更」する必要があります。

カレントフォルダを変更するには、「ChDirステートメント」を使用します。

次のコードでは、ChDirステートメントでカレントフォルダを変更します。チェックとしてメッセージボックスで変更を確認しています。その後、変更されたカレントフォルダにある「Book1.xlsx」ブックが開かれます。

VBA
Sub Book1を開く5()
        ChDir "C:\Users\(ユーザー名)\Documents\NewFolder"
        MsgBox CurDir
        Workbooks.Open "Book1.xlsx"
End Sub
vbabookopenp002
ChDirステートメントの実行

引数を使ってワークブックを開く

Openメソッドにはいろいろな引数が準備されています。

頻度の少ないものも含めると10種以上になります。

その中での「読み取り専用で開く」「読み取りパスワードで開く」「書き込み可能パスワードで開く」についてです。

読み取り専用についての引数設定

ReadOnly

ワークブックを読み取り専用で開くにはTrueを指定します。省略時はFalseになります。

ReadOnly:=True

Password

読み取りパスワードで保護されているワークブックを開く場合は、読み取りパスワードを指定します。

Password:=”読取りパスワード”

VBA
Sub Book1を開く6()
        Workbooks.Open _
            Filename:="C:\Users\CONTR\Documents\NewFolder\Book1.xlsx", _
                ReadOnly:=True, Password:="ROCK"
End Sub

パスワード保護

WriteResPassword

書き込み保護されたワークブックに書き込みを許可するパスワードを指定します。 この引数を省略し、ワークブックが書込み保護されている時は、パスワード入力のダイアログ ボックスが表示されます。

WriteResPassword:=”書込みパスワード”

VBA
Sub Book1を開く7()
        Workbooks.Open _
            Filename:="C:\Users\CONTR\Documents\NewFolder\Book1.xlsx", _
                WriteResPassword:="ROCK"
End Sub

ダイアログボックスから開く

エクセルに備え付けられた「『ファイルを開く』ダイアロブボックス」を呼び出して、ワークブックを開く方法もあります。

次のVBAコードでは、「『ファイルを開く』ダイアロブボックス」を開いて、「OK」ボタンで目的のワークブックを開く。「キャンセルボタン」では、メッセージで「キャンセルされた」と表示してプロシージャーを終了します。

開かれたブックは、「アクティブ状態」なので「ActiveWorkbook」オブジェクトでブック名やパスを取得する、あるいは、変数名を付けてSetステートメントでオブジェクト変数として格納することも出来ます。

VBA
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

まとめ

vbabookopenp003

ブックを開く操作はいくつかのパターンがあります。そしてまた、VBAコードを作成する上では、重要な操作にもなりますので是非慣れておくようにしましょう。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。