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回.エクセルの機能を上手に使う

・エクセルの機能を使った例 ・普通にマクロVBAを書くと ・C2セルに計算式を入れ、フィルハンドルをダブルクリックでオートフィル ・C2セルに計算式を入れ、C2セルをコピー、C3~C11を選択し貼り付け ・C2~C11を選択し、計算式を入力しCtrl+Enterで一括入力 ・マクロの記録を参考にVBAを書いてみると、 ・どのエクセル機能を使うかを考える ・並べ替え ・オートフィルター ・エクセルの機能を上手に使う ・ExcelマクロVBA入門の対応ページ
第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)
・ブックの書き方 ・シートの書き方 ・セルにブック・シートを指定する方法 ・直接指定 ・Withを使う ・Setを使う ・SetとWithを組み合わせて使う ・ExcelマクロVBA入門の対応ページ
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)
・シートのコピー ・シートの挿入 ・シートの削除 ・メソッドの戻り値 ・ExcelマクロVBA入門の対応ページ
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
第20回.全てのシートに同じ事をする(For~Worksheets.Count)
・シートの指定方法 ・全シートの「印刷の向き」を「横」に設定します。 ・シート名に"横"と入っているシートだけ「印刷の向き」を「横」に設定します ・シート名に"削除"と入っていたらシートを削除する ・For Eachについて ・ExcelマクロVBA入門の対応ページ
第21回.ファイル一覧を取得する(Do~LoopとDir関数)
・Dir関数 ・Dir関数の使い方 ・ファイルの一覧を取得するマクロVBAコード ・Do~Loopステートメント ・ExcelマクロVBA入門等の対応ページ
第22回.複数ブックよりデータを集める
・第17回.セルにブック・シートを指定する ・第19回.ブックを開く・閉じる・保存する ・第21回.ファイル一覧を取得する ・複数ブックよりデータを集めるVBA
第23回.複数のプロシージャーを連続で動かす(Callステートメント)
・長い1つのプロシージャーを分割する ・プロシージャーを呼び出すCallステートメント ・ExcelマクロVBA入門等の対応ページ
第24回.マクロの呪文を追加してボタンに登録(ScreenUpdating)
・マクロの呪文「Application.ScreenUpdating」を追加 ・ボタンの追加とマクロの登録 ・ExcelマクロVBA入門等の対応ページ
第25回.月別ブックより部署別シートに担当別に集計するNo1
マクロ再入門と題しての連載もいよいよ大詰めです、これまでの総復習として、以下のような処理のマクロを書いてみましょう。■処理概要 月別のデータファイル(ExcelファイルまたはCSV)を読込み、※項目は、日付,部署,担当者,売上数,売上金額 これを、新規ブックを作り、部署別のシートに、担当者・年月ごとの集計値を出力す…
第26回.月別ブックより部署別シートに担当別に集計するNo2
マクロ再入門の課題として、月別ブックより部署別シートに担当別に集計する、これを実現する実際のマクロを順に見ていきます。全体の処理手順は以下になります。■処理手順 ・ファイル一覧 シート「ファイル一覧」に、サブフォルダ「月別データ」内の全Excelファイルの一覧を取得 ・データ収集 シート「データ」に、


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

無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)
PIVOTBY関数(縦軸と横軸でグループ化して集計)|エクセル入門(2023-11-19)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




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


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



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