【パスが分かればブック操作は簡単】VBAでブックを開く方法を解説

Excelのブックを「開く」ってどうすればいいの?

Excel VBAでブックを開く操作は難しいと思われているかもしれません。

確かに、絶対パスや相対パスなど専門用語で分かりづらい点もありますが、イメージができると初心者の方でもブックの操作ができるようになります。

パスを理解してマクロを作るのと、そうでないのではVBAの成長速度が大きく変わってきます。

そこで初心者の方にも理解しやすいように、図解を用いて専門用語をなるべく分かりやすく解説していきます。

こんな方におすすめ

・ブックを開くときのイメージがわかない方

・絶対パスや相対パスを使ってブックを開きたい方

・相対パスで異なる階層のブックを開きたい方

・ブックを開くための最適なコードを知りたい方

結論

・ブックを開くときは パスを使って、目的ファイルまでの道順を意識する

「絶対パス=住所」 、「相対パス=現在地から目的地までの道順」とイメージすると良い

・絶対パス、相対パスを使ってブックを開くコード

'絶対パスでファイルを開く
Workbooks.Open "C:\Users\デスクトップ\フォルダ\sample"

'相対パスでファイルを開く(同じフォルダ内の場合)
Workbooks.Open ThisWorkbook.Path & "\sample.xlsx"

相対パスを使って異なる階層のブックを開く時

・1つ前の階層:ThisWorkbook.Path & “\../ファイル名.xlsx”

・1つ先の階層ThisWorkbook.Path & “\./フォルダ名\ファイル名.xlsx”

・ ブックを開く時に最適なコードは 「Dir関数」や「For Each In コレクション~ Next 」を使って、①フォルダやブックが存在しない場合、②誰かが開いている場合を想定してコーディングすると良い。

ブックを開くときのイメージ

VBAのコードだけで別のExcelブックを開くことができます。

そこで、ブックを開くときに重要になるのが「パス」です。

「パス」って何?

目的ファイルまでの道順のこと。

パスは目的のファイルやフォルダまでの住所や道順を表しているイメージです。

パスをイメージしやすくした画像

ブックを開くときは道順を示す「パス」を指定することで、目的のブックにたどり着き開くことができます。

そして、ブックを開くときのパスには「絶対パス」と「相対パス」の2通りで道順を指定することができます。

絶対パスとは、住所

絶対パスとは、ファイルの場所を示した住所でありドライブから記述します。

住所でいえば都道府県から記述して宛名で終わるイメージです。

例えば「pakaji.xls」ファイルの場所を探すときには、

Cドライブ→ユーザーのデスクトップ→フォルダ→pakaji.xlsという順序になります。

絶対パスを指定する

絶対パスは、この住所が分かれば指定できますが、途中の住所の名前が変わると目的地までたどり着けなくなってしまいます。そこで便利なのが「相対パス」です。

相対パスとは、現在地からの道順

相対パスとは、今いる現在地からどの道順で行けば目的地にたどり着けるかを指定する方法です。

相対パスのイメージした図

現在地を基準として、「同じフォルダ内」もしくは「前や先のフォルダ」にファイルがあるのかを判断します。

相対パスを指定した画像

現在開いているワークブックと同じフォルダ内にあるブックを指定する場合、

ThisWorkbook.Path & “ブック名.xlsx”

というコードで指定します。

ワークブックを開く

ワークブックを開くには下記のコードで開きます。

'
Workbooks.Open パス
'

絶対パスでワークブックを開く

Sub fileOpen()

'絶対パスでファイルを開く
Workbooks.Open "C:\Users\デスクトップ\フォルダ\sample"

End Sub

絶対パスで解説したパスをWorkbooks.Openの後に記述するだけです。

具体的に絶対パスを指定する方法は、プロパティを使うと便利です。

【絶対パスでブックを開く手順】

①開きたいブックを右クリックしてプロパティを表示する

②プロパティの場所に表示されてるパスをコピーする

③VBAに Workbooks.Open の次にコピーしたパスをペーストする

④プロパティに戻り、今度はファイル名をコピーする

⑤VBAのペーストしたパスの後ろに\ファイル名となるようにペーストする

絶対パスでブックを開く方法を解説した図

相対パスでワークブックを開く

Sub fileOpen()

'相対パスでファイルを開く(同じフォルダ内の場合)
Workbooks.Open ThisWorkbook.Path & "\sample.xlsx"

End Sub

具体的な相対パスの指定方法は開きたいブックの道順を調べるだけです。

【相対パスでブックを開く手順】

※同じフォルダ内にある場合

①開きたいブックが何処にあるか確認する

②同じフォルダの場合はThisWorkbook.Path & “\ファル名.xlsx”と記述する

相対パスでブックを開く方法を解説した図

異なる階層のフォルダへ相対パスを指定する

同じフォルダ内であれば ThisWorkbook.Path & “\ファイル名.xlsx” だけで相対パスを指定できますが、違う階層のフォルダに開きたいブックがあるときは「../」や「./フォルダ名」などを使用します。

「違う階層のフォルダ」って何?

パソコンのフォルダは地下構造になっておりデスクトップを地上をしたとき、デスクトップに表示されてるフォルダを開くと、そこは地下1階になるイメージです。

フォルダの階層をイメージした図

ちなみに作業中のフォルダ(現在地)のことを「カレントディレクトリ」と呼びます。

<相対パスで階層を指定>

階層階層を示すコード記述例
2つ上の階層
(2つ前)
\../../ ThisWorkbook.Path & “\../../ファイル名.xlsx”
1つ上の階層
(1つ前)
\../ ThisWorkbook.Path & “\../ファイル名.xlsx”
現在のフォルダ内なし ThisWorkbook.Path & “\ファイル名.xlsx”
1つ下の階層
(1つ先)
\./フォルダ名ThisWorkbook.Path & “\./フォルダ名\ファイル名.xlsx”
2つ下の階層
(2つ先)
\./フォルダ名\./フォルダ名 ThisWorkbook.Path & “\./フォルダ名\./フォルダ名\ファイル名.xlsx”

ブックを開く最適なコード

ブックを開く時には予期しないことでエラーになったりします。

①フォルダやブックが存在しない場合

②誰かが開いている場合

そこで、これらの事態を想定してプログラムを組み込んでおけばエラーにならずに済みます。

Sub fileOpen()

    Dim check
    Dim book
    Dim file
    
    '開きたいブックを格納
    file = "C:\Users\デスクトップ\フォルダ\sample.xlsx"
    
    '➀ブックの存在をチェック
    check = Dir(file)
    
    If check = "" Then
        MsgBox file & vbCrLf & "はありません"
        Exit Sub
    End If
    
    '➁同名のブックが開かれていないかをチェック
    For Each book In Workbooks

        If book.Name = check Then
            MsgBox check & vbCrLf & "は今開いています"
            Exit Sub
        End If
    
    Next book
    
    '目的のブックを開く
    Workbooks.Open file
    
End Sub

① ブックの存在をチェックする

ファイルが存在するか確認するときはDir関数を使います。

「Dir関数」って何?

Dir(パス):パス通りにファイルが存在すれば、ファイル名を返す関数。もし、ファイルが存在しなければ空白(””)を返す。

Dir関数を解説した図

このDir関数を用いてファイルが存在すれば問題ないですが、存在しない場合はMsgBoxで表示すると分かりやすいです。

➁同名のブックが開かれていないかをチェックする

同名のブックが開いているか確認するには「For Each ~ Next」文を使うと便利です。

「For Each ~ Next」文って何?

繰り返し処理のことで、グループの中を最後まで繰り返し処理してくれる。

For Each 変数 In コレクション
 処理
Next 変数

コレクションとは、WorkbooksやWorksheetsなど同じ種類のオブジェクトの集合体のこと。

For ~ Next文は回数を指定できるのに対して、For Each ~ Next文は回数しては無く、最後まで繰り返す。

「For Each ~ Next」文を用いて、今開いてるワークブックの名前を知りたいので、

「For Each 変数 In Workbooks」として今開いているワークブックを順番で探しに行きます。

※ブックを開いた順番で探しに行きます。

そして、「If 変数.Name = Dir(パス) Then」で今開いているワークブックの名前と開きたいブックの名前が一緒かを確認して、同じ場合はMsgBox関数で注意メッセージを表示させます。

Dir関数とFor Each Nextを使って安全にブックを開く

まとめ

VBAでブックを開くためのポイント

・絶対パス=住所

・相対パス=現在地から目的地までの道順

'絶対パスでファイルを開く
Workbooks.Open "C:\Users\デスクトップ\フォルダ\sample"

'相対パスでファイルを開く(同じフォルダ内の場合)
Workbooks.Open ThisWorkbook.Path & "\sample.xlsx"

相対パスを使って異なる階層のブックを開く時

・1つ前の階層:ThisWorkbook.Path & “\../ファイル名.xlsx”

・1つ先の階層ThisWorkbook.Path & “\./フォルダ名\ファイル名.xlsx”

・ブックを開く時に最適なコードは「Dir関数」や「For Each In コレクション~ Next 」を使って、①フォルダやブックが存在しない場合、②誰かが開いている場合を想定してコーディングすると良い。

コメント

タイトルとURLをコピーしました