ITサポーターTsuchida

VBA Stepup4

第4章 ブックの操作

ExcelVBAで他のブックのデータを参照して、データを編集しながら、名前を付けて保存ができれば便利になります。

そのためには、ブックの操作が必要になります。この操作を行うには、ブックのファイル名の他にフォルダの場所の指定が必要になります。フォルダの場所の指定が、フォルダの概念を知らないとややこしくもあります。ファイル名の指定やフォルダ名の指定の他に、ファイルが存在しているかどうか、ファイルが存在していたら別の名前にするとか、ブックの操作って意外にいろんなハードルがあります。

一般的にマクロを実行しているブックの同じフォルダかサブフォルダにあるブックを参照することが多いです。今回は同じブックかサブフォルダについて紹介します。

ブックを開く

ブックを開くには、以下の記述になります。

Workbooks.Open "ブック名(フルパスで)"

記述自体は単純なようですが、ブック名をフルパスで指定するのが意外と大変です。

例えば、ドキュメントフォルダにあるExcelのブックでBook1.xlsxという名前のファイルなら、フルパスのブックは以下のとおりです。

C:\Users\ユーザ名\Documents\Book1.xlsx

このように、Cドライブからすべてのフォルダを絶対パスで正確に入力する必要があります。ただこの絶対パスの記述は長くなり、入力間違いをしやすいです。しかも絶対パスで決め打ちで入力すると、ブックを移動させたときに、移動先の記述に変更しなければなりません。そのため、絶対パスをそのまま入力することはお勧めしません。

現在実行しているマクロのブックと同じフォルダならフォルダ情報を取得し使うことができます。

例えば、マクロのブックがドキュメントのフォルダにあって、同じフォルダにBook1.xlsx開く場合は、まずはマクロのブックの場所を取得します。

ThisWorkbook.Path

この方法で、マクロのブックのパスが取得でき、同じパスにあるブックのファイル名は以下のようになります。

ThisWorkbook.Path & "\Book1.xlsx"

ThisWorkbook.Pathではあくまでブックのパス情報なので、パスの配下のブック名の先頭に「\」が必要になります。このやり方でブックを開く方法は以下のとおりとなります。

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

ただし、保存するときにもパスを使うと考える場合に、変数にセットするようにします。また、開いたブックを変数にすると、その後のブックの指定が簡単になります。

Dim bPath As String

Dim wb As Workbook

bPath = ThisWorkbook.Path

Set wb = Workbooks.Open(Filename:=bPath & "\Book1.xlsx")

※Setステートメントを使うときは、Workbooks.Openメソッドの引数は括弧で括ります。

このようにパスや開いたブックを変数にセットすると、開いたブックの中のワークシートやセルが参照しやすくなります。

ブックを閉じる

開いているブックを閉じるのは、以下のとおりです。

Workbooks("ブック名").Close

閉じる場合はブック名のみでパスは必要ありません。ブックがSetステートメントで変数にセットされている場合は、変数を使うことができます。

wb.Close

閉じる際に保存するかどうかを決めてから閉じることが無難です。

wb.Close savechanges:=True←保存して閉じる

wb.Close savechanges:=False←保存せずに閉じる

 

ブックを新規で作成する

他のブックを参照して、編集結果を新しいブックをする場合は、ブックを新規で作成します。

ブックを新規作成する場合は、以下のとおりとなります。

Workbooks.Add

Setステートメントで変数にセットすることもできます。

Dim wb As Workbook

Set wb = Workbooks.Add

なお、新規作成はファイルの名前がないので、保存する際は必ず名前を付けて保存をします。

ブックを上書き保存

開かれているブックを上書き保存するのは、以下のとおりです。

wb.Save

フォームに入力したデータをセルに代入して、すぐ保存するときなどには使います。

通常はマクロが実行してデータを保存する場合は、閉じることが多いので単独に使うことはありません。

 

ブックを名前を付けて保存

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

上書き保存と違って、ファイル名とファイルを保存する場所の指定が必要です。ファイルを保存する場所はフルパスの指定になります。

wb.SaveAs フルパス と ファイル名

wb.SaveAs ThisWorkbook.Path & "\savebook.xlsx"

マクロを実行しているブックとフォルダに、「savebook.xlsx」という名前で保存になります。

ブック操作は組み合わせて使用する

VBAを使ったマクロでは、既存のブックを開き、新規作成したブックを名前を付けて保存すると自動化の幅が広がります。参照するだけのブックなら、マクロの最初でブックを開き、最後でブックを閉じるを組み合わせます。新しいブックを作るなら、最初にブックを新規作成してから、最後にブックに名前を付けて保存し、ブックを閉じる(マクロ実行後にブックを見たい場合は閉じなくてもいい)の組み合わせます。

多くの場合は、ブックを参照して、新しいブックに編集して保存します。 この第4章のブックの操作ができるようになると手作業が格段に減ります。