【ExcelVBA】シートとブックの操作
シートとブックの操作
これまでは「Cells」を使ってセルの操作を行ってきましたが、Excel VBAではセル以外にもシートやブックの操作も行うことができます。
少し複雑なVBAプログラムを作ろうとすると、複数のシートにまたがって処理を行ったり、新しいシートやブック(Excelファイル)を作ったりといったことを行うこともあります。
今回はこれらの代表的な使い方を確認していきましょう。
シートの追加と選択
新しいシートを追加するには、次のようにします。
Sub VBA基礎第12回_1() Worksheets.Add End Sub
次のようにすることもできます。
Sub VBA基礎第12回_2() Sheets.Add End Sub
方法が2パターン存在するのは、シートにもいくつか種類があるからになります。
[012-【ExcelVBA】シートとブックの操作-001.png]
この画面はシートのタブで右クリックして「挿入」を選択すると表示するダイアログです。
このようにいつも使用している使用頻度の高い「ワークシート」以外にも「グラフシート」や「マクロシート」があり、これらをまとめて扱うのが「Sheets」、ワークシートだけを扱うのが「Worksheets」になります。
追加されたシートは、現在表示しているシートの前に追加されます。この現在表示しているシートのことを「アクティブシート」と言います。
このアクティブシートを切り替えるには次のようにします。
Sub VBA基礎第12回_3() Worksheets("Sheet1").Activate End Sub
Sub VBA基礎第12回_4() Worksheets(1).Activate End Sub
「Worksheets」の引数には、文字列を指定するか数字を指定します。
文字列の場合は、アクティブにしたいシート名を指定します。数字の場合は、先頭のシートを「1」として連番になります。
これまでに、「Cells」を使ってセルを操作してきましたが、これはアクティブシートのセルになります。
(アクティブシート以外のセルを操作することもできます。これは後述します。)
シートの名前変更と削除
シート名を変更するには次のようにします。
Sub VBA基礎第12回_5() Worksheets(1).Name = "2020年" End Sub
今回はWorksheetオブジェクトを使いましたが、Sheetオブジェクトでも同じように使うことが可能です。これまでは、オブジェクトの種類が変わると使うことのできるプロパティやメソッドが変わるという説明をしてきましたが、このように例外も存在します。
WorksheetとSheetがとても似ているために、このようにプロパティやメソッドを共通化しているといったこともあります。
シートを削除するには次のようにします。
Sub VBA基礎第12回_6() Worksheets("Sheet5").Delete End Sub
ワークシートを削除するときにはこのような確認メッセージが表示されます。
[012-【ExcelVBA】シートとブックの操作-002.png]
削除をクリックすると本当にシートが消えてしまい、戻すことができなくなります。
VBAで行った操作は「元に戻す」操作や「Ctrl + Z」で戻すことができませんので注意してください。筆者はよくマクロを実行する前に上書き保存をしておき、プログラムに不具合があってデータをもとに戻したくなった場合には、保存せずにそのままExcelを終了して開きなおすようにしています。
マクロを実行する前に「上書き保存」操作、もしくはショートカットの「Ctrl + S」をしておくことをお勧めします。
さて、このシート削除ですが、たくさんのシートを削除するようなケースだといちいちダイアログで「削除」ボタンをクリックしなくてはならず面倒です。次のように「Delete」の前後で確認メッセージの表示を切り替えるような処理をいれることで、回避することが可能です。
Sub VBA基礎第12回_7() Application.DisplayAlerts = False Worksheets("Sheet5").Delete Application.DisplayAlerts = True End Sub
お気づきかと思いますが、この処理は確認メッセージがでずに削除となるので、VBAを実行する前に先に紹介した「あらかじめ上書き保存しておく」ことをお勧めします。
ブックの追加と保存
新しいブックを追加するには、次のようにします。
Sub VBA基礎第12回_8() Workbooks.Add End Sub
空の新しいBookが作成され、アクティブブックも新しい方へ切り替わります。
ブックを上書き保存や名前を付けて保存するには、次のようにします。
Sub VBA基礎第12回_9() '' ブックを上書き保存する場合 Workbooks("Book1.xlsm").Save End Sub
Sub VBA基礎第12回_10() '' ブックを名前を付けて保存する場合 ThisWorkbook.SaveAs Filename:="C:\Users\sudo\Documents\Test.xlsm" End Sub
上書き保存する場合には、保存したい対象のブックをWorkbooksの引数に指定して「Save」メソッドを実行します。
名前を付けて保存する場合には、「Filename」引数に保存先のパスを指定して「SaveAs」メソッドを実行します。
ここで使用している「ThisWorkbook」というオブジェクトは、現在マクロを実行中のブックのことを表します。よく使う予約語ですので覚えておくことをお勧めします。
最後にブックを閉じるには、次のようにします。
Sub VBA基礎第12回_11() ThisWorkbook.Close End Sub
まとめ
今回はシートとブックオブジェクトの基本操作について紹介しました。
これらの操作ができるようになると、マクロでできることの範囲が広がります。
たとえば、「今月の請求リスト」から「個々の請求書を別のブックで作成する」といったことも可能です。まだ紹介していませんが、PDFで保存したり印刷したりといったこともVBAで行うことが可能です。
どうでしょうか、普段行っている業務をVBAで効率化するイメージが少しはつかめてきましたでしょうか。
次回は、デバッグです。