【Excel VBA入門】Worksheetオブジェクトを使ったシート操作の基本

【Excel VBA入門】Worksheetオブジェクトを使ったシート操作の基本

ワークシートに名前を付ける人は几帳面と勝手に思っている吉池(@valmore_myoshi)です。

今回はワークシートを洗いざらい取り上げます。ワークシートの作成や追加、削除はもちろん、実務で必要な範囲をわかりやすく解説していきます。

ワークシートの操作はVBAでよく使うものの一つなので、しっかりマスターしましょう!

ワークシートってなに?

VBAの記事を読むくらいなので、すでにわかってるよ、という声が聞こえてきそうですが、簡単にワークシートを説明します。案外、定義というのは大事です!

ワークシートとは、Excelのデータを管理する単位です。セルの集合をまとめて管理でき、複数作成可能。Excelファイルのなかでも種類ごとにデータを分けたいときに便利です。

ワークシートのサンプル

現在選択中のワークシートを特に「アクティブなシート」と呼びます。ワークシートの切り替え時によく出てくる言葉なので覚えておきましょう。

WorksheetオブジェクトとWorksheetsオブジェクトの違い

ワークシートを操作するオブジェクトには、WorksheetオブジェクトとWorksheetsオブジェクトがあります。単数形と複数形という違いだけですが、WorksheetsオブジェクトはWorksheetオブジェクトのコレクションです。

WorksheetとWorksheetsオブジェクトの違い

一つの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オブジェクトの違いはわかりましたか?

ワークシートは他にもプロパティやメソッドが用意されていますが、今回紹介したもので十分です。よく使うメソッドは限られているので、使い方をきちんと理解しましょう!