\Excelショートカット集もらえる/
【VBA入門】ファイル操作|ブックを開く
この記事では、Excel VBAを用いて、別のExcelファイルを開くマクロの書き方について解説します。特定のファイルを直接開くマクロだけでなく、開くファイルをダイアログで選択するマクロの書き方についても解説します。初めから通して読むことで、より理解が深まるような記事構成となっております。サンプルファイルもご用意していますので、記事を読みながら問題を解くこともできます。
- 毎回同じファイルを開くマクロを作成したい
- 開くファイルをダイアログで選択できるマクロを作成したい
- マクロを実行するファイルとは異なるフォルダ階層のファイルを開きたい
ファイルパスに注意!
WindowsOSとMacOSではファイルパスの表記が一部異なります。本記事ではWindowsOSの表記方法で解説します。
MacOSのパソコンを使用されている方は、ファイルパスの円マーク(¥)をバックスラッシュ(/)に置き換えて読み進めてください。
また、それぞれの事例で解説しているコードに含まれているファイルパスはサンプルです。マクロを実行する際には、実際のファイルパスをコピー&ペーストして書き換えてから実行してください。ファイルパスのコピー方法は下記を参考にしてください。
まず最初に覚えたい:Workbooks.Openメソッド
Excelファイルを開くためには、Workbooks.Openメソッドを使用します。引数が多い構文ですが、この後にお見せする構文でハイライトされている3つの引数をまずは理解しましょう。具体的な引数の名前とその役割については以下の通りです。
Worlbooks.Open (FileName, UpdateLinks, ReadOnly, Format, Password, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
引数 | 省略 | 説明 |
---|---|---|
FileName | × | 開くファイルのパスを指定します。 |
UpdateLinks | ○ | リンクされているデータの更新方法を指定します。TrueまたはFalseを指定します。デフォルトはTrueで、リンクを更新します。 |
ReadOnly | ○ | ファイルを読み取り専用で開くかどうかを指定します。TrueまたはFalseを指定します。デフォルトはFalseで、Trueを指定すると読み取り専用で開くことができます。 |
Format | ○ | テキストファイルを開く際のデータフォーマットを指定します。1(タブ区切り)から6(CSV)までの整数値を指定します。 |
Password | ○ | ファイルがパスワードで保護されている場合、そのパスワードを指定します。 |
第5引数(WriteResPassword)以降も、詳細設定ができるものがありますが、実務で使用するケースが少ないため、興味のある方は、こちらを確認してみてください!
【基礎例題】Workbooks.Openメソッドを使ってみよう
それでは実際に例題に取り組みながら、Workbooks.Openメソッドを使用したマクロを作成してみましょう。
以下の条件に従って、「営業部8月実績表.xlsx」を開くマクロを作成してください。
- 同じフォルダに格納されている「samplefile_vba_fileopen.xlsm」のSheet1にボタンを作成し、ボタンをクリックした時に作成したマクロが実行されるようにする。
Sub 基礎例題1()
'変数を定義する
Dim wb1 As Workbook
Dim filePath1 As String
'ファイルパスを指定する
filePath1 = "C:¥ファイルパス¥サンプルフォルダ¥営業部8月実績表.xlsx"
' ファイルを読み取り専用で開く
Set wb1 = Workbooks.Open(filePath1, ReadOnly:=True)
End Sub
読み取り専用で開く設定に!
読み取り専用で開くことによって、変更してはいけないファイルを誤って変更してしまうことを未然に防ぐことができます。今回はWorkbooks.Openメソッドの引数ReadOnlyをTrueに設定することで、「営業部8月実績表」を読み取り専用で開くように設定しています。
【実践例題】開くファイルの名前がルールにそって定期的に変わる場合
以下の条件に従って、「営業部⚪︎月実績表.xlsx」を開くマクロを作成してください。
- 同じフォルダに格納されている「samplefile_vba_fileopen.xlsm」のSheet1にボタンを作成し、ボタンをクリックした時に作成したマクロが実行されるようにする。
- ファイル名の”⚪︎月”は毎月変更するものとする。
- 「営業部⚪︎月実績表.xlsx」は読み取り専用で開く。
Sub 実践例題1()
'変数を定義する
Dim wb2 As Workbook
Dim filePath2 As String
Dim fileName2 As String
'ファイルパスを指定する
filePath2 = "C:¥ファイルパス¥サンプルフォルダ¥"
' 営業部で始まり、実績表で終わるファイルを対象にする
fileName2 = Dir(filePath2 & "営業部*実績表.xlsx")
' ファイルを読み取り専用で開く
Set wb2 = Workbooks.Open(fileName2, ReadOnly:=True)
End Sub
Dir関数とワイルドカードで部分一致に!
「営業部8月実績表.xlsx」のファイルパスを直接指定せず、Dir関数を用いて部分一致にしている点がポイントです。これにより、ファイルパス名を毎回書き換える負担が無くなります。
Dir関数については改めて別記事で解説する予定です。
実務で使える:GetOpenFilenameメソッド
ここまでは、「開くファイルが格納されているファイルがいつも同じ場所にある」という状況で解説してきました。しかし、実務では開きたいファイルが毎回異なっていたり、開くファイルを自分で選択したい場合が多いです。この場合は、Workbooks.Openメソッドだけでは対応できないため、GetOpenFilenameメソッドという別の構文を組み合わせることで解決していきます。GetOpenFilenameメソッドの構文は以下の通りです。
Application.GetOpenFilename (FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
引数 | 省略 | 説明 |
---|---|---|
FileFilter | × | ファイルの候補を指定する文字列 (ファイル フィルター文字列) を指定します。 |
FilterIndex | ○ | FileFilter で指定したファイル フィルター文字列の中で、1 から何番目の値を既定値とするかを指定します。 この引数を省略するか、ファイル フィルター文字列の数より大きい数値を指定すると、最初のファイル フィルター文字列が既定値となります。 |
Title | ○ | ファイルを読み取り専用で開くかどうかを指定します。TrueまたはFalseを指定します。デフォルトはFalseで、Trueを指定すると読み取り専用で開くことができます。 |
Title | ○ | ダイアログ ボックスのタイトルを指定します。 この引数を省略すると “ファイルを開く” になります。 |
ButtonText | ○ | ファイルがパスワードで保護されている場合、そのパスワードを指定します。 |
MultiSelect | ○ | True を指定すると、複数のファイルを選択できます。 False を指定すると、1 つのファイルしか選択できません。 既定値は False です。 |
GetOpenFilenameメソッドを使用することによって、開くExcelファイルをダイアログで選択できるようになります。
【基礎例題】GetOpenFilenameメソッドを使ってみよう
それでは実際に例題に取り組みながら、GetOpenFilenameメソッドを使用したマクロを作成してみましょう。
以下の条件に従って、ダイアログで選択したファイルを開くマクロを作成してください。
- 同じフォルダに格納されている「samplefile_vba_fileopen.xlsm」のSheet1にボタンを作成し、ボタンをクリックした時に作成したマクロが実行されるようにする。
- 開くフォルダはダイアログで選択できるようにする。
Sub 基礎例題2()
'変数を定義する
Dim FileName3 As String
'ダイアログを表示させる
FileName3 = Application.GetOpenFilename()
'ダイアログで選択したファイルを開く
Workbooks.Open FileName3
End Sub
GetOpenFilenameメソッドでダイアログを表示!
今回のマクロでは、Workbooks.Openメソッドの引数Filenameに変数Filename3、すなわちGetOpenFilenameメソッドを指定することによって、ダイアログで選択したファイルを開くことができるようになっております。
【実践例題】ダイアログで表示する初期フォルダを指定する方法
以下の条件に従って、「営業部⚪︎月実績表.xlsx」を開くマクロを作成してください。
- 同じフォルダに格納されている「samplefile_vba_fileopen.xlsm」のSheet1にボタンを作成し、ボタンをクリックした時に作成したマクロが実行されるようにする。
- 開くフォルダはダイアログで選択できるようにする。
- ダイアログで最初に表示されるフォルダは「サンプルフォルダ」とする。
【VBAで記述したマクロ】
Sub 実践例題2()
'変数を定義する
Dim FileName4 As String
'カレントフォルダに移動する
ChDir "C:¥ファイルパス¥サンプルフォルダ¥営業部8月実績表.xlsx"
'ダイアログを表示させる
FileName4 = Application.GetOpenFilename()
'ダイアログで選択したファイルを開く
Workbooks.Open FileName4
End Sub
ChDir関数で最初に表示されるフォルダを変更!
基礎例題で解説したマクロでは、最初にダイアログに表示されるフォルダとして、カレントフォルダがデフォルトで設定されています。カレントフォルダとは、コンピューターの中で現在作業しているフォルダのことを指します。
今回のマクロではChDir関数というVBA関数を利用することで、カレントフォルダを設定しています。ChDir関数でカレントフォルダを設定し直すことによって、ダイアログで最初に表示されるフォルダを変更し直すことができます。ChDir関数については改めて別記事で解説する予定です。
まとめ
GetOpenFilenameメソッドとWorkbooks.Openメソッドについて解説しました。
今回は学習の進めやすさを優先するためにメソッド・関数ごとに解説しましたが、実際の場面でどの方法を使用するのか考える時は、次のようなワークフローで考えると、どの方法を使えば良いのかわかりやすいです。
「どの方法を使えばいいのかわからない……」と悩んだ場合は、上記のワークフローに当てはめて考えてみましょう。
「VBAを体系的に学びたい」
「わからないところは質問しながら進めたい」
そんな方は、ユースフルのExcelPro講座VBAコースをご確認ください。MicrosoftMVPの長内が監修し、現役エンジニアが開発した実務直結のオンライン講座決定版です。これさえ受講すれば、コードを書くたびにつまずいて、時間を消費していた状況をガラっと変えることができます。ぜひチェックしてみてください!