VBA再入門
ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
公開日:2015-10-06 最終更新日:2020-09-26

第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)


VBA ファイルを開く

ExcelマクロVBAで最も便利に感じるのが、
他のブックからデータを取得したり、他のブックのデータを変更したりする場合でしょう。
関数では出来ない、マクロVBAならではの完全自動化のシステムが作成できます。


ブック(Excelファイル)のパス(場所)を特定する

ブック(Excelファイル)を扱う上で一番の問題は、
そのファイルがどこにあるか、つまりどこのフォルダに入っているかを特定しなければならない点です。
PCのフォルダはPCごとに違うため、どのPCでも動くマクロVBAを作るためには、
ファイルの入っているフォルダを決めなければなりません。
しかし、固定の指定、例えば
C:\Excel専用\test\sample.xls
※ルートディレクトリ(Cドライブ等)からの全てのフォルダの道順を記したものを、フルパスと言います。
このように決め打ちした名前では何かと不便な事が多くなります。
(違うPCでフォルダ構成が違うとマクロVBAが動かなくなってしまいます。)
そこで、
マクロVBAの書かれている、つまりマクロ自身のファイルが入っているフォルダを取得し、
そのフォルダからの位置関係で全てのフォルダを指定するようにします。

ThisWorkbook.Path

これが、マクロVBAの書かれているファイルが入っているフォルダになります。

ExcelマクロVBA サンプル コード

実際に書いて実行してみて下さい。
以下では、このThisWorkbook.Pathを使ったVBAサンプルコードにしています。

ブックを開く

ブックを開くには、

Workbooks.Open "フルパス&ファイル名"

文法的にはこれだけです。
そこで、上に書いたようにマクロ自身のいるパスを使って、以下のように書きます。

Workbooks.Open ThisWorkbook.Path & "\test.xlsx"

マクロ自身のブックと同じフォルダにある、test.xlsxを開きます。
ThisWorkbook.Pathとファイル名の間に"\"を忘れないようにして下さい。
文字列をつなげるには、&(アンパサンド)を使います。
これは、ワークシートの関数と同じです。
開いた後、そのブックのシート・セルを扱うには、ブック名が必要になります。
test.xlsxの先頭シートのA1セルに"テスト"と入れる場合、

Workbooks("test.xlsx").Worksheets(1).Range("A1") = "テスト"

このようになりますが、"test.xlsx"という名前を複数個所に書くのは効率が悪いので、
以下のように、Setで変数に入れるか、Withで指定するようにします。

ExcelマクロVBA サンプル コード

ExcelマクロVBA サンプル コード

このように、
Setで変数に入れたりWithで指定する場合は、引数となるファイルのパス部分は()の中に書くようになります。
これは、VBAの文法としての決まりですので、そのように書くものだと理解してください。

上記はどちらでも同じですが、
複雑な(さらに多くのブックを扱う等の)マクロVBAの場合は、一旦Setで変数に入れた方が良いでしょう。

ブックを閉じる

開かれているブックを閉じるには、

Workbooks("ブック名").Close

これでブックは閉じられるのですが、ブックに何らかの変更が発生しているときは、

エクセル マクロVBA 参考画面

このようなメッセージが出ます。
マクロVBAで自動化するには、保存するか保存しないかをはっきりさせる必要があります。

・変更があれば保存して閉じる場合
Workbooks("ブック名").Close savechanges:=True

・変更があっても保存しないで閉じる場合
Workbooks("ブック名").Close savechanges:=False

ここまで、
Workbooks("ブック名")
と書いてきましたが、通常はブックを開いたときに、
Setで変数に入れるか、Withで受けるているはずなので、VBAコードは以下のようになります。

ExcelマクロVBA サンプル コード

ExcelマクロVBA サンプル コード

上記のどちらでも書けるように、実際に書いて練習しましょう。

上書き保存

開かれているブックを上書き保存するには、

Workbooks("ブック名").Save

これでブックは上書き保存されます。
しかし、ブックは開かれたままですので、普通は閉じることになります。
ブックを閉じるのは前述のとおりですので、
Workbooks("ブック名").Close savechanges:=True
これが使えれば、この上書き保存のSaveを使う事は少なくなります。
ただし、念のための意味も含めて、

ExcelマクロVBA サンプル コード

このように書くことも結構ありますし、これはこれで良いと思います。

名前を付けて保存

新規作成したブックを名前を付けて保存、または、開いたブックを別ファイルとして保存するには、

Workbooks("ブック名").SaveAs フルパス&ファイル名.拡張子

このように書きます。
保存するブックが、どのように開かれたか、どのように作成されたかによって、
いくつかのパターンがあります。

追加した新規ブックを保存する時
ExcelマクロVBA サンプル コード

シートを新規ブックとしてコピーし保存する時
マクロ 入門 VBAコード


開いたブックを別ファイルで保存する時
ExcelマクロVBA サンプル コード

保存形式(ファイルの種類)について

エクセルでは、色々なファイル形式で保存できます。

名前を付けて保存する時に選べるファイルの種類

エクセル マクロVBA 参考画面

マクロVBAで特に何も指定しなければ標準のファイル形式になります。
ただし、拡張子を指定する必要があます。
マクロ無しなら.xlsx、マクロ有りなら.xlsm
拡張子が違うと正しく保存できませんので結構難しい部分もあります。

他のファイル形式にしたい場合も含めて、マクロの記録をしてみましょう。
ただし、マクロが保存できないファイル形式(CSV等)を開いている状態の場合は、
通常のエクセルを選択してマクロの記録を開始してから、対象のブック(CSV等)に移動して保存操作をしてください。

ExcelマクロVBA入門の対応ページ

第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
あるセルの文字と、あるセルの文字をくっつけて、別のセルに表示する、よくある事例であり、頻繁に行われることです。A1セルに"abc" B1セルに"123" この時に、C1セルに"abc123"を入れるような場合のマクロVBAになります。

第51回.Withステートメント
・Withの構文 ・Withを使った時と使わない時の比較 ・Withの使用例 ・Withのネスト ・Withを使ったときに気を付けるべき書き方 ・Withの使いどころ ・サイト内の参考ページ

第52回.オブジェクト変数とSetステートメント
・オブジェクト変数 ・個有のオブジェクト型とは ・Setステートメント ・Setステートメントの使用例 ・WithとSetの使い分け方 ・Setステートメントの実践的な使い方 ・Is演算子によるオブジェクトの比較 ・最後に

第53回.Workbookオブジェクト
・WorkBookの指定方法 ・WorkBookのデータ型 ・WorkBookのプロパティとメソッド ・Workbookオブジェクトの使用例 ・プロパティとメソッドの違い

第63回.ブックを開く(Open)
・Workbooks.Openメソッド ・Openメソッドの使用例 ・Openメソッドの戻り値の使い方 ・Workbooks.Addメソッド ・Openメソッドの関連記事

第64回.ブックを閉じる・保存(Close,Save,SaveAs)
・ブックを閉じる ・ブックを上書き保存 ・ブックに名前を付けて保存 ・ブックのコピーを保存 ・ブックを閉じる・保存の実践例



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

第16回.エクセルの機能を上手に使う
第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
第20回.全てのシートに同じ事をする(For~Worksheets.Count)
第21回.ファイル一覧を取得する(Do~LoopとDir関数)
第22回.複数ブックよりデータを集める
第23回.複数のプロシージャーを連続で動かす(Callステートメント)
第24回.マクロの呪文を追加してボタンに登録(ScreenUpdating)
第25回.月別ブックより部署別シートに担当別に集計するNo1
第26回.月別ブックより部署別シートに担当別に集計するNo2


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

第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




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


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



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