VBA入門
ブックを開く(Open,Add)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2021-09-24

第63回.ブックを開く(Open,Add)


VBA マクロ ブックを開く Open

他のブックを開く方法です。
しかし、これが結構いろいろあるのです。
Excelで開くことが出来るファイルはCSV等のテキストファイルもありますが、
ここではエクセルファイル限定で説明します。


テキストファイルやCSVについては、別の記事を参考にして下さい。

CSVの読み込み方法
・もっとも簡単かつ良くあるCSV読み込みVBAコード ・「,」「"」に対応したCSV読み込みVBAコード ・CSVをExcelブックとして開くVBA ・クエリーテーブルを使ったCSV読み込みVBAコード ・その他のCSV読み込み方法

マクロVBAでブックを開くにはWorkbooksのOpenメソッドを使用します。
このOpenメソッドには、指定できるオプションが非常に沢山用意されています。
通常使うものは限られていますが、一通りOpenメソッドを見てみましょう。



Workbooks.Openメソッド

既存ブックを開くには、WorkbooksコレクションOpenメソッドを使います。
Workbooksコレクションは、Excelで現在開かれているすべてのWorkbookオブジェクトのコレクションです。

Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

名前 説明
FileName 開くブックのファイル名。
UpdateLinks ファイル内の外部参照 (リンク) の更新方法を指定します。
ReadOnly ブックを読み取り専用モードで開くには、True を指定します。
Format テキスト ファイルを開く場合は、この引数で区切り文字を指定します。
Password パスワード保護されたブックを開くのに必要なパスワードを指定します。
WriteResPassword 書き込み保護されたブックに書き込みをするために必要なパスワードを指定します。
IgnoreReadOnlyRecommended [読み取り専用を推奨する] チェック ボックスをオンにして保存されたブックを開くときでも、読み取り専用を推奨するメッセージを非表示にするには、True を指定します。
Origin 開こうとしているファイルがテキスト ファイルの場合、それがどのような形式のテキスト ファイルかを指定します。
Delimiter 開こうとしているファイルがテキスト ファイルで、引数 Format が 6 の場合は、この引数で区切り文字を使用します。
Editable 開こうとしているファイルが Excel 4.0 のアドインの場合、この引数に True を指定すると、アドインがウィンドウとして表示されます。
Notify ファイルが読み取り/書き込みモードで開けない場合に、ファイルを通知リストに追加するには、True を指定します。
Converter ファイルを開くときに最初に使用するファイル コンバーターのインデックス番号を指定します。
AddToMru 最近使用したファイルの一覧にブックを追加するには、True を指定します。既定値は False です。
Local Excel の言語設定 に合わせてファイルを保存するには、True を指定します。
CorruptLoad 開くモードを、XlCorruptLoad列挙で指定します。
抽出(xlExtractData)、正常(xlnormalload)、修復(xlRepairFile)から指定します。
既定の動作はxlNormalLoadになり、回復は行われません。

上表は、名前付き引数です。

戻り値
Openメソッドには戻り値があります。
戻り値は、
開いたブックのWorkbookオブジェクトになります。

太字の引数のみ説明します。
それ以外について必要な場合は、上記表の説明またはヘルプ等を参考にして下さい。

FileName
通常は、エクセルファイルをフルパスで指定します。

FileName:="C:\User\sample.xls"

このように指定します。
パスが指定されていないと、カレントディレクトリーからになりますが、
そのような使い方をせず、フルパスで指定するようにして下さい。

マクロを書いているブックと同一フォルダなら、

FileName:=Thisworkbook.Path & "\sample.xls"

このように指定します。
Thisworkbook.Path、これでブック自身のパスが取得できます


UpdateLinks
外部参照 (リンク) のあるブックを開こうとすると、
リンクの更新方法を確認するメッセージがユーザーに表示されます。

0 : 外部参照 (リンク) は更新されません。
3 : 外部参照 (リンク) が更新されます。

(1,2の指定もありますが、特に使う事はないでしょう)

UpdateLinks:=0
これで、リンクが更新されずに、ブックが開かれます。
0Falseと記す事もできます、VBAではFalse=0です。

ReadOnly

ReadOnly:=True
これで、読み取り専用で開かれます。

Password、WriteResPassword
パスワード保護されているブックを開く場合には、
Password:="読取りパスワード"
WriteResPassword:="書込みパスワード"
このようにすることで、パスワード入力のダイアメグが出なくなります。

CorruptLoad
開くモードを、XlCorruptLoad列挙で指定します。
エラーのあるエクセルファイルを開くと、

マクロVBA openメソッド

このように、「'○○'の一部の内容に問題が見つかりました。・・・」とメッセージが出ます。
「はい」をクリックすると、

マクロVBA openメソッド

修復されたメッセージが表示され、「閉じる」でブックを開くことができます。
しかし、
このファイルをVBAでOpenすると、

マクロVBA openメソッド

このようにマクロがエラー停止してしまいます。
先の手動で開く時と同様に、
回復して開く場合はCorruptLoadにxlRepairFileを指定します。

さらに、修復されたメッセージを止めるために、
Application.DisplayAlerts = False
これも同時に指定してください。
CorruptLoadは引数の最後なので、名前付き引数を使い、

Application.DisplayAlerts = False
Workbooks.Open Filename:=ファイルパス, CorruptLoad:=xlRepairFile

このように指定しすると良いでしょう。
XlCorruptLoad.はXlCorruptLoad列挙になります。

※注意
そもそもエラーファイルは、その原因やデータ破損が無いか等の確認が必要になります。
マクロで開けたとしても、そのファイルを放置しておいて良いかは別問題になります。


Openメソッドの使用例

Workbooks.Open "C:\User\sample.xls"

このように、ファイルのみ指定する場合は、名前付き引数を使用するまでもないでしょう。

Application.DisplayAlerts = False
Workbooks.Open Filename:="C:\Test\sample.xls", UpdateLinks:=0, ReadOnly:=True, CorruptLoad:=xlRepairFile

・外部参照 (リンク) は更新しない
・読み取り専用
・修復モード
このように、引数が複数になる場合は、名前付き引数を使用した方が良いでしょう。


Openメソッドの戻り値の使い方

Setステートメント

Dim wb As Workbook
Set wb = Workbooks.Open(Filename:="C:\User\sample.xls")

メソッドの戻り値を使用する場合は引数を()で囲みます。

戻り値が、Workbookオブジェクトなので、
同時に、Setステートメントでオブジェクト変数に入れています。
これにより、オブジェクト変数で開いたブックを扱う事ができるようになります。
これは、
Workbooks.Open(Filename:="C:\User\sample.xls")

Set wb = Activeworkbook
または、
Set wb = Workbooks("sample.xls")

これらを1行で指定している事と同じ意味になります。
第52回.オブジェクト変数とSetステートメント
・オブジェクト変数 ・個有のオブジェクト型とは ・Setステートメント ・Setステートメントの使用例 ・WithとSetの使い分け方 ・Setステートメントの実践的な使い方 ・Is演算子によるオブジェクトの比較 ・最後に

Withステートメント

With Workbooks.Open(Filename:=str)
  '・・・
.  Close SaveChanges:=False
End With

このように、Withで戻り値のブックオブジェクトを受け取る事が出来ます。
開いたブックをVBA内で使用する場所が限定されている場合は、
変数も必要ないので記述が簡単になります。

Withの中では、先頭の.(ピリオド)の付け忘れに注意しましょう。
SetとWithはセットで覚えておきましょう。
第51回.Withステートメント
・Withの構文 ・Withを使った時と使わない時の比較 ・Withの使用例 ・Withのネスト ・Withを使ったときに気を付けるべき書き方 ・Withの使いどころ ・サイト内の参考ページ


Workbooks.Addメソッド

既存ブックを開くのではなく、新規にブックを追加する場合には、WorkbooksコレクションAddメソッドを使います。
Addメソッドは、Workbooksコレクションに新規Workbookを追加します、

Workbooks.Add(Template)

戻り値
新しいブックを表すWorkbookオブジェクト。

Template
省略可能
新しいブックの作成方法を指定します。
この引数に既存のExcelファイルを指定すると、指定したファイルをテンプレートとして新しいブックが作成されます。
つまり指定したブックがコピーされて新規作成される事になります。

この引数にXlWBATemplate定数を指定しすると、新しいブックには指定した種類のシートが1つだけ含まれます。
名前 説明
xlWBATChart -4109 グラフ
xlWBATExcel4IntlMacroSheet 4 Excel バージョン 4 のマクロ
xlWBATExcel4MacroSheet 3 Excel バージョン 4 のインターナショナル マクロ
xlWBATWorksheet -4167 ワークシート

この引数を省略すると、空白のシートを含む新しいブックが作成されます
シート数は、Application.SheetsInNewWorkbookプロパティによって決定されます。


Openメソッドの関連記事

ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
・ブック(Excelファイル)のパス(場所)を特定する ・ブックを開く ・ブックを閉じる ・上書き保存 ・名前を付けて保存 ・保存形式(ファイルの種類)について ・ExcelマクロVBA入門の対応ページ
ブックを安全確実に開く方法(Open)
マクロVBAの中で、他のブックを開く事はよくあります、ブックを開く時、ブックが存在しているか、既に開いてないか これらのチェックをせずに開いてしまうと、マクロがエラー停止してしまいます。ここでは、これらのチェック方法についての具体的なVBAコードを紹介します。




同じテーマ「マクロVBA入門」の記事

第60回.エラー処理(On Error)
第61回.「On Error GoTo」と「Exit Sub」
第62回.「On Error Resume Next」とErrオブジェクト
第63回.ブックを開く(Open,Add)
第64回.ブックを閉じる・保存(Close,Save,SaveAs)
第65回.シートの挿入、名前の変更(Add,Name)
第66回.シートのコピー・移動・削除(Copy,Move,Delete)
第67回.総合練習問題7
第68回.シートの保護、ブックの保護(Protect)
第69回.シートの非表示(Visible,Hidden)
第70回.ウィンド枠の固定(FreezePanes)


新着記事NEW ・・・新着記事一覧を見る

TOROW関数(配列を横1行の配列にして返す)|エクセル入門(2022-10-31)
TOCOL関数(配列を縦1列の配列にして返す)|エクセル入門(2022-10-31)
CHOOSECOLS関数(配列から複数の指定された列を返す)|エクセル入門(2022-10-29)
CHOOSEROWS関数(配列から複数の指定された行を返す)|エクセル入門(2022-10-29)
WorksheetFunctionの効率的な使い方とスピル新関数の利用|VBA入門(2022-10-27)
VSTACK関数(配列を縦方向に順に追加・結合)|エクセル入門(2022-10-25)
HSTACK関数(配列を横方向に順に追加・結合)|エクセル入門(2022-10-25)
LAMBDA以降の新関数の問題と解説(配列操作関数編)|エクセル入門(2022-10-24)
LAMBDA以降の新関数の問題と解説(ヘルパー関数編)|エクセル入門(2022-10-24)
LAMBDA以降の新関数の問題集|エクセル入門(2022-10-24)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.マクロって何?VBAって何?|VBA入門
9.エクセルVBAでのシート指定方法|VBA技術解説
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ