【エクセルVBA入門】他のワークブックをWithで開く&保存せずに閉じる

★気に入ったらシェアをお願いします!


オープンとクローズ

みなさん、こんにちは!
珍しく月曜日にVBAの記事を書いていますタカハシ(@ntakahashi0505)です。

エクセルVBAを使ってバラバラの経費精算書のデータをデータベースに集約するシリーズの第4回です。

前回はこちらの記事でした。

【エクセルVBA入門】Withでプログラムをスッキリわかりやすく書く
エクセルVBAを使ってバラバラの経費精算書のデータをデータベースに集約するの第3回です。今回はWithというステートメントを使って、オブジェクト名を省略してプログラムをスッキリ書く方法をお伝えします。

ワークシート名を何回も書かなければいけないときに、Withを使って省略する書き方について解説をしました。

さて、今回は他のワークブックを開くくまたは閉じる、そしてWithと組み合わせる方法についてお伝えしていきます。

どうぞよろしくお願いします!

スポンサーリンク

前回のおさらいと課題

前回のプログラムはこちらです。

「経費精算書」シートのデータを「経費データ」シートにコピー&ペーストをしていく内容です。

ただ、このプログラムですと業務フロー上で面倒な点があります。

というのも、経費精算書は各メンバーからはそれぞれの個別のファイルにて受け取るはずです。受け取ったファイルを都度開いて、「経費精算書」シートにデータをコピーしてからでないとプログラムを動かすことができませんよね。

今回は各自から受け取ったファイルをプログラムから直接開いたり閉じたりしてデータを取得する方法に変更していきたいと思います。

Openメソッドで他のワークブックを開く

今回はアクティブワークブックが保存されているフォルダに「data」というフォルダがあり、その中に各メンバーから受け取った経費精算書のファイルがあるとしましょう。

まず簡単のため、「経費精算書_経費.xlsx」のファイルを開いて処理をすることにします。

こちらの記事の復習になりますが

【初心者向けエクセルVBA】ファイルのコピーを使って取引先別の請求書を作る
請求データ一覧から請求書を自動で作成するシリーズのVBA講座もいよいよ9回目です!今回はWorksheetのコピーではなく、ファイルをコピーして取引先別の請求書ファイルを作成する方法を解説します。

単純にファイルを開く場合は

Workbooks.Open ファイル名

です。ファイル名はフルパスで指定する必要がありますから、今回の場合は

とすればOKです。ActiveWorkbook.Pathでアクティブワークブックと同じパスを取得しています。

ワークブックを開いた上でWith

なのですが、今回は一歩進んだOpenの仕方をしていきたいと思います。ワークブックのOpenとWithと組み合わせるのです。

With Workbooks.Open(Filename:=ファイル名)

  With .Worksheets(1)

    (プログラム)

   End With

End With

まず外側のWithにより、開いたワークブックのオブジェクト名を省略することができます。

内側のWith .Worksheets(1)で、そのワークブックの1枚目のシートにWithをかけます。

つまり(プログラム)にオブジェクト名を「.」で記述した場合は、開いたワークブックの1枚目のシートでの処理ということになります。

百聞は一見にしかず、今回のプログラムをこの書き方で記述してみますと

となります。

With内のプログラムは冒頭のプログラムの内容と全く同じ記述で済んでいることをご確認ください。

開いたワークブックのシートをすぐに使いたいときにはWithとOpenを組み合わせると非常に簡潔にプログラムを書けるので便利です。

ちなみにお気づきかも知れませんが、ワークブックをオープンする書き方が「Workbooks.Open ファイル名」ではなくて「Workbooks.Open(Filename:=ファイル名)」となっていることに注意してください。

Closeメソッドで保存をせずにファイルを閉じる

ワークブックは要がすんだら閉じてしまいましょう。これもプログラムで制御できます。

既に上記プログラム内に記載をしていますが、ワークブックを閉じる際の記述方法は

Workbookオブジェクト.Close SaveChanges:=False

です。「SaveChanges:=False」は「保存をせずに」という意味で、必要がなければ省略可能です。

上記プログラムの例では、Closeの記述は外側のWithの入れ子の中に入れていますので、ワークブックのオブジェクト名は省略にて記述しています。

まとめ

Withをしながら他のワークブックを開く方法、保存せずにワークブックを閉じる方法についてお伝えしました。

ワークブックを開くときはWithで開くことにより以降のオブジェクト名の表記を省略しスッキリ記述することができますし、開いたワークブック用のオブジェクト変数などを用意する必要もなくなります。

次回の記事はこちらです。

【エクセルVBA入門】For Each~Nextでフォルダ内のブック全てを参照する
エクセルVBAを使ってバラバラの経費精算書のデータをデータベースに集約するシリーズの第5回です。今回はフォルダ内の複数のワークブック全てを順番に参照して処理していく方法についてお伝えします。

いよいよ、複数の経費精算書ファイルを連続して取り込んでいく方法について解説をしていきたいと思います。

お楽しみに!

連載目次:経費精算書のデータをデータベースに集約する

  1. 【エクセルVBA入門】バラバラの経費精算書をデータにまとめる
  2. 【エクセルVBA入門】Do While~Loopで条件を満たす間繰り返し
  3. 【エクセルVBA入門】Withでプログラムをスッキリわかりやすく書く
  4. 【エクセルVBA入門】他のワークブックをWithで開く&保存せずに閉じる
  5. 【エクセルVBA入門】For Each~Nextでフォルダ内のブック全てを参照する
  6. 【エクセルVBA入門】人為的なミスを回避する方法その1~ファイル名を活用する
  7. 【エクセルVBA入門】人為的なミスを回避する方法その2~マスタを利用
  8. 【エクセルVBA入門】データの重複を防ぐSubプロシージャの作成