Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - Worksheets

Excel VBA VBA
スポンサーリンク

Worksheets は「ブックの中に並んでいる“ワークシートの集合”」

まずイメージからいきます。
1つの Excel ファイル(Workbook)の中には、シートが何枚も入っていますよね。
その「ワークシートたち全部」をまとめて持っているのが Worksheets コレクション です。

Workbook:ファイル1冊
Worksheet:その中のシート1枚
Worksheets:そのブックの中にあるワークシート全部

という関係です。

VBA では、

ThisWorkbook.Worksheets
ActiveWorkbook.Worksheets
VB

のように、「どのブックの Worksheets か」を指定して使うのが基本です。


特定のシートを名前や番号で取り出す

名前で指定するのが一番わかりやすい

一番よく使うのは「シート名で指定する」書き方です。

Sub SampleWorksheetsByName()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("集計")

    ws.Range("A1").Value = "テスト"

End Sub
VB

ここでの流れは、

ThisWorkbook(このブック)の
Worksheets(シート全部)の中の
“集計” という名前のシート

を取り出して、ws に入れています。

「どのブックの、どのシートか」をはっきりさせるために、
超初心者のうちは必ず ThisWorkbookWorkbooks("名前") からたどる書き方を意識してほしいです。

インデックス番号(1, 2, 3…)で指定する

シートは左から順に 1, 2, 3… という番号も持っています。

Sub SampleWorksheetsByIndex()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets(1)   ' 一番左のシート

    ws.Range("A1").Value = "一番左のシートです"

End Sub
VB

ただし、シートの並び順が変わると指しているシートも変わってしまうので、
「固定のシートを触りたい」ときは、基本的には名前指定の方が安全です。


Worksheets.Add / Worksheets.Count で「シートを増やす・数える」

新しいシートを追加する

新しいシートを追加したいときは、Worksheets.Add を使います。

Sub SampleWorksheetsAdd()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets.Add

    ws.Name = "新しいシート"
    ws.Range("A1").Value = "追加されたシートです"

End Sub
VB

Worksheets.Add の戻り値は「追加されたばかりの Worksheet」なので、
それを ws に受け取ってから名前を付けたり、セルに値を入れたりします。

どの位置に追加するか(先頭・末尾など)を細かく指定することもできますが、
超初心者のうちは「とりあえず Add で1枚増える」と覚えておけば十分です。

シートの枚数を数える(Count)

Sub SampleWorksheetsCount()

    Dim n As Long

    n = ThisWorkbook.Worksheets.Count

    MsgBox "このブックには " & n & " 枚のシートがあります。"

End Sub
VB

Worksheets.Count は、そのブックに何枚シートがあるかを返します。
ループ処理を書くときの基礎になります。


すべてのシートに対して同じ処理をする(For Each)

全シートを順番に回して処理する

Worksheets は「コレクション(集合)」なので、For Each で1枚ずつ取り出せます。

Sub SampleWorksheetsLoop()

    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        ws.Range("A1").Value = ws.Name
    Next ws

End Sub
VB

この例では、「すべてのシートの A1 に、そのシート名を書き込む」処理をしています。

ポイントは、

ThisWorkbook.Worksheets という「集合」から
For Each で 1枚ずつ ws に取り出して
同じ処理を繰り返している

という構造です。

「全シートに同じ書式を設定したい」「全シートの同じセルを集計したい」など、
実務でよくあるパターンに直結します。


Worksheets と ActiveSheet の違いを整理する

Worksheets は“全部”、ActiveSheet は“今選ばれている1枚”

ここで一度、よく混ざる2つを整理します。

ThisWorkbook.Worksheets   ' このブックのシート全部
ActiveSheet               ' 今アクティブなシート1枚
VB

例えば、

Sub SampleActiveSheet()

    MsgBox "今アクティブなシートは " & ActiveSheet.Name & " です。"

End Sub
VB

ActiveSheet は「ユーザーが今選んでいるシート」です。
マクロの途中でアクティブシートが変わると、指しているシートも変わります。

一方で、

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("集計")
VB

のように変数に入れてしまえば、
その後はアクティブシートが変わっても、ws はずっと「集計」シートを指し続けます。

超重要なのは、

「ActiveSheet に頼りすぎると、ユーザーの操作に振り回される」
「Worksheets(“名前”) を変数に握っておくと、安定して同じシートを触れる」

ということです。


Worksheets を使うときに意識してほしい重要ポイント

「どのブックの Worksheets か」を必ず書く癖をつける

いきなり

Worksheets("集計").Range("A1").Value = 1
VB

と書くこともできますが、
これは「アクティブなブックの Worksheets」を暗黙に使っています。

マクロ用ブックとデータブックが別になってくると、
「どのブックのシートを触っているのか」が分からなくなり、バグの元になります。

超初心者のうちから、

ThisWorkbook.Worksheets("集計")
Workbooks("売上集計.xlsx").Worksheets("集計")
VB

のように、「どのブックか」を明示して書く癖をつけておくと、後で自分を助けてくれます。

変数に入れてから使うと、読みやすさと安全性が上がる

1行で全部書くよりも、あえて分解して書いた方が、
「自分が何をしているのか」がはっきり見えます。

Dim wb As Workbook
Dim ws As Worksheet

Set wb = Workbooks("売上集計.xlsx")
Set ws = wb.Worksheets("集計")

ws.Range("A1").Value = "OK"
VB

この書き方だと、

どのブックを触っているのか
どのシートを触っているのか

が一目で分かります。
オブジェクトを変数に入れてから使う、という習慣は、
この先ずっと効いてくる大事な基礎スキルです。


まとめ:Worksheets は「ブックの中のシートたちへの入口」

Worksheets の本質は、

「1つのブックの中にある、すべてのワークシートをまとめた“集合オブジェクト”」

です。

押さえておきたいポイントをコンパクトにまとめると、

Workbook の中に Worksheets があり、その中の1枚が Worksheet
Worksheets(“名前”) で特定のシートを取り出し、変数に Set してから使うと安全
Worksheets.Add で新しいシートを追加、Worksheets.Count で枚数を取得
For Each で「全シートに同じ処理」を書ける
ActiveSheet に頼りすぎず、「どのブックのどのシートか」を常に意識する

VBAVBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました