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

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
最終更新日: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のプロパティとメソッド ・プロパティとメソッドの違い

第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 ・・・新着記事一覧を見る

ピッボットテーブルって便利だよね|還暦のVBA(2021-10-18)
還暦のVBA:VBAまでたどりつけるか… (2021-09-29)
VLOOKUPを使うことを基本としてシートを設計すべきか|エクセル雑感(2021-08-17)
コンピューターはブラックボックスで良い|エクセル雑感(2021-08-14)
小文字"abc"を大文字"ABC"に変換する方法|エクセル雑感(2021-08-13)
ADOでテキストデータを集計する|VBAサンプル集(2021-08-04)
VBA学習のお勧めコース|エクセル雑感(2021-08-01)
エクセル馬名ダービー|エクセル雑感(2021-07-21)
在庫を減らせ!毎日棚卸ししろ!|エクセル雑感(2021-07-05)
日付型と通貨型のValueとValue2について|エクセル雑感(2021-06-26)


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

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




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


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



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