【Excel VBA入門】Worksheetオブジェクトを使ったシート操作の基本
ワークシートに名前を付ける人は几帳面と勝手に思っている吉池(@valmore_myoshi)です。
今回はワークシートを洗いざらい取り上げます。ワークシートの作成や追加、削除はもちろん、実務で必要な範囲をわかりやすく解説していきます。
ワークシートの操作はVBAでよく使うものの一つなので、しっかりマスターしましょう!
目次
ワークシートってなに?
VBAの記事を読むくらいなので、すでにわかってるよ、という声が聞こえてきそうですが、簡単にワークシートを説明します。案外、定義というのは大事です!
ワークシートとは、Excelのデータを管理する単位です。セルの集合をまとめて管理でき、複数作成可能。Excelファイルのなかでも種類ごとにデータを分けたいときに便利です。
現在選択中のワークシートを特に「アクティブなシート」と呼びます。ワークシートの切り替え時によく出てくる言葉なので覚えておきましょう。
WorksheetオブジェクトとWorksheetsオブジェクトの違い
ワークシートを操作するオブジェクトには、WorksheetオブジェクトとWorksheetsオブジェクトがあります。単数形と複数形という違いだけですが、WorksheetsオブジェクトはWorksheetオブジェクトのコレクションです。
一つのExcelファイルに含まれるワークシートすべてをWorksheetsオブジェクトが管理し、個々のシート内のデータはWorksheetオブジェクトが担当とイメージしてください。
基本的にワークシートの操作はWorksheetsオブジェクトの役割です。一方、Worksheetオブジェクトはシート内のデータやシート名を扱うときに使います。
コレクションについてはこちらの記事をご覧ください。
【Excel VBA入門】Collectionとは?サイズ変更に強いリストの作り方
操作したいワークシートを取得する
ワークシートを取得する基本的な方法は2つあります。下記のシートを例に取得方法を解説します。
一つ目の方法はシート名を指定します。例えば、仕入先一覧のワークシートを取得したければ、Worksheetsオブジェクトにシート名を渡します。
二つ目はインデックス番号を指定する方法です。一番左のシートを1として、順番に番号が振られています。ゆえに仕入先一覧を取得したければ、3を指定すればOKです。
Dim ws As Worksheet ' シート名から取得する場合 Set ws = Worksheets("仕入先一覧") ' インデックス番号から取得する場合 Set ws = Worksheets(3)
オブジェクト名で取得する
基本的な方法ではありませんが、オブジェクト名を指定してワークシートを取得する方法もあります。オブジェクト名とは各ワークシートにつけられたVBA上の名前です。シート名とは異なる点に要注意!
オブジェクト名はVBEの開発画面、①プロジェクトウィンドウから確認できます。取得したいシートを選択して②プロパティウィンドウで確認することも可能です。
オブジェクト名は②プロパティウィンドウから自由に変えられるので、VBAを書くうえでわかりやすい名前に変更するものアリです!
ワークシートがあるか確かめる
特定のワークシートの存在を確かめるには、すべてのワークシートの名前を比較する方法があります。例えば、顧客一覧というシート名のワークシートの存在チェックは下記のようになります。For Each文で一つずつシート名をチェックし、一致したときにループを抜けています。
Dim ws As Worksheet For Each ws In Worksheets If ws.Name = "顧客一覧" Then Debug.Print "顧客一覧シートが存在します!" Exit For End If Next
新しいワークシートを追加する
ワークシートの追加には、WorksheetsオブジェクトのAddメソッドを使います。
4つの引数をとり、BeforeとAfterに既存のワークシートを指定すると、その前後に新たなシートを追加します。Countは追加枚数でTypeは追加するシートの種類を指します。
戻り値は新たに追加したWorksheetオブジェクトなので、続けて操作したいときは変数に代入しましょう!
Worksheets.Add(Before, After, Count, Type)
例えば、既存シートの末尾にワークシートを追加する処理は下記のように書きます。引数Afterに既存ワークシートのうち最後のものを渡しています。最後のワークシートの後、つまり末尾を意味しているのです。
Worksheets.Add After:=Worksheets(Worksheets.Count)
いらないワークシートを削除する
ワークシートの削除にはWorksheetsオブジェクトのDeleteメソッドを使います。
' インデックス番号を指定して削除 Worksheets(1).Delete ' シート名を指定して削除 Worksheets("商品一覧").Delete
一度に複数のシートを削除するには、Worksheetsオブジェクトの引数にインデックス番号あるいはシート名の配列を渡します。
' インデックス番号を指定して削除 Worksheets(Array(1, 2)).Delete ' シート名を指定して削除 Worksheets(Array("商品一覧", "顧客一覧")).Delete
ワークシートをコピーする
既存のワークシートをコピーするにはWorksheetオブジェクトのCopyメソッドを使います。引数としてBeforeとAfterにワークシートを指定でき、その前後にコピーしたシートを挿入します。BeforeとAfterの両方とも省略すると、コピーされたWorksheetオブジェクトを含む新たなワークブックが作成されます。
コピーしたいWorksheetオブジェクト.Add(Before, After)
例えば、商品一覧というシート名のワークシートを先頭にコピーするには、インデックス番号に1を指定したワークシートを引数Beforeに渡します。
Worksheets("商品一覧").Copy Before:=Worksheets(1)
ワークシートの移動方法いろいろ
ワークシートの移動はWorksheetオブジェクトのMoveメソッドを使います。引数としてBeforeとAfterにワークシートを指定でき、その前後にシートを移動します。BeforeもAfterも省略した場合、新たなブックに移動します。
移動したいWorksheetオブジェクト.Add(Before, After)
複数のシートを移動したいときは配列でWorksheetsオブジェクトに指定すればOKです。下記の例では商品一覧シートと顧客一覧シートを新たなブックに移動しています。
Worksheets(Array("商品一覧", "顧客一覧")).Move
まとめ
ワークシートの基本操作を解説しました。WorksheetオブジェクトとWorksheetsオブジェクトの違いはわかりましたか?
ワークシートは他にもプロパティやメソッドが用意されていますが、今回紹介したもので十分です。よく使うメソッドは限られているので、使い方をきちんと理解しましょう!