【VBA(Excelマクロ)】Worksheetsでシートを操作する方法まとめ

スポンサードリンク
VBA

この記事を読んでわかること

  • 「Worksheets」でできることや役割を学べる
  • 「Worksheets」を使用した時によくあるエラーと対処法を知れる
  • 「Worksheets」と「Sheets」の違いがわかる

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします

スポンサードリンク

VBA(Excelマクロ)のWorksheetsとは

Worksheetsは、Excelのワークシートを指定・操作するためのコレクションです。
コレクションとは、同類のオブジェクトをまとめたもの(集合体)を指します。
オブジェクトとは、操作対象(ワークブックやワークシート、セルなど)を指します。

要は、ワークシートを操作するための命令だと思ってください。

WorksheetsとSheetsの違い

似たようなものに「Sheets」があります。
「Worksheets」は、Excelのワークシートのみを指します。
一方「Sheets」は、Excelのワークシートだけでなく、グラフシートやVBAのモジュールシートなども含まれます。

SheetsとWorksheetsの違い

ワークシートを操作する場合は、「Worksheets」を使うのが無難です。
なぜなら、例えばワークシートがいくつあるのかをカウントしたい場合、「Sheets」を使うとグラフシートなども含んでしまうことになるからです。

「Sheets」がパソコン、「Worksheets」がノートパソコンみたいなものでしょうか。
「パソコンの数をカウントして!」と言われて、ノートパソコンしか無ければ問題ありませんが、
デスクトップパソコンもある場合、これもカウントしてしまいますよね…。

「Sheets」の方が文字数が少なくて書きやすいので、ついこちらを使ってしまいがちです。
グラフシートなどが無ければ「Sheets」でも問題は起きませんが、一度ついたクセはなかなか直りません。
予期せぬバグが起こる前に「ワークシート操作=Worksheetsを使う」というクセをつけておきましょう。

スポンサードリンク

Worksheetsでシートを操作する方法

シートを指定(シート名・シート番号)

下記VBAコードは、「Worksheets」を使ってシートを指定した例です。

▼シート名で指定
Worksheets("Sheet1")

▼シート番号で指定
Worksheets(1)

▼アクティブシートを指定(参考)
ActiveSheet

シート名で指定する場合は「”(ダブルクォーテーション)」で囲ってください。
下記のように、変数に入れたシート名で指定する場合、「”」は不要です。

sheetname = "Sheet1"
Worksheets(sheetname).Range("A1") ' シート名の「"」は不要

シート番号の「1」は一番左側のシートを指します。
「2」なら左から二番目、一番右のシートを指定したい場合は、「Worksheets.Count」を記述してください。

▼一番右のシートを指定
Worksheets(Worksheets.Count)

シート指定に続けてセルを指定する場合が多いです。

Worksheets("Sheet1").Range("A1")

上記VBAコードでは、「Sheet1」の「A1」セルを指定したことになります。

▼セル指定後の使用例

Sub セルの値を表示()
    Debug.Print Worksheets("Sheet1").Range("A1").Value
End Sub
元データ
実行結果

前提知識{マクロの基礎・作り方から実行まで
前提知識{「Debug.Print」で値を表示させる方法

今回は一般的な「Range」を使っていますが、「Cells」でもセルを指定できます。

Worksheets("Sheet1").Cells(1, 1) ' Cells(行, 列)

()内の左側の1が1行目を指し、右側の1が1列目(A列)を指します。
つまり「Cells(1, 1)」はA1セルを指定したということになります。

シートを選択(.Select)

「Select」メソッドを使うことで、指定したシートを選択した状態にすることができます。

Worksheets("Sheet2").Select ' Sheet2を選択(Activeにする)
シート選択結果

メソッドとは、特定のオブジェクト(セルやシートなど)に対して実行できる機能で、
「オブジェクト名.メソッド名」というコードで記述します。
「Worksheets(“Sheet2”).Select」と記述することで、AddメソッドをSheet2に対して実行したということになります。

シート選択の詳細解説は、下記記事をご参考ください。
グループ化や選択解除方法なども解説しております。

シートを追加(.Add)・削除(.Delete)

「Add」メソッド「Delete」メソッドを使うことで、シートの追加や削除が可能です。

Worksheets.Add ' 新しいシートを追加
Worksheets("Sheet1").Delete ' 指定のシートを削除

シートの追加や削除方法の詳細は、下記記事で解説しております。

シートをコピー(.Copy)

「Copy」メソッドを使用することで、指定のシートをコピーすることができます。

Worksheets("Sheet1").Copy

コピー方法の詳細は、下記記事をご参考ください。

シートを移動(.Move)

「Move」メソッドを使用することで、シートを指定の位置に移動させることができます。

Worksheets("Sheet2").Move Before:=Worksheets(1) ' Sheet2を先頭に移動

シートの名前を変更(.Name)

「Name」メソッドを使用することで、指定のシート名を変更することができます。

Worksheets("Sheet1").Name = "Utataneシート" ' Sheet1の名前を「Utataneシート」に変更

シート名変更方法の詳細は、下記記事をご参考ください。

シートを取得(set)

「Set」ステートメントを使うことで、シートを取得して変数に代入することができます。

Set sht = Worksheets("Sheet1") ' Sheet1を取得して変数「sht」に代入

ステートメントとは、命令や宣言を行うための構文です。
「今から特別な処理を始めますよ!」という宣言だと思ってください。
「選手宣誓」や「○○を始めます!」といった感じでしょうか。

VBAで代表されるステートメントには、変数の宣言を行う「Dim」やループ文を管理する「For」、サブプロシージャの始まりとなる「Sub」などがあります。

通常、セルの値を取得する場合などは、「Set」をつけません。

val = Worksheets("Sheet1").Range("A1").Value ' Sheet1のA1セルの値を取得して変数に代入

しかしながらシートそのものやセルそのものを取得する場合は、特別な処理となるため「Set」が必要になります。
詳細は下記記事をご参考ください。

スポンサードリンク

Worksheets使用時のよくあるエラーと対処法

オブジェクトが必要です

オブジェクトが必要です
オブジェクトが必要です

このエラーは、Setの使い忘れで発生する場合が多いです。
詳細な対処方法は、下記記事をご参考ください。

その他の実行時エラー

実行時エラー-2147352565
実行時エラー-2147352565
実行時エラー1004
実行時エラー1004

実行時エラーは、コードで指定した処理が実行できなかった時に発生します。
例えば「存在しないシートを指定した・選択した」「対応していないオブジェクトにメソッドを使った」などです。
「デバッグ」をクリックすることで、該当箇所が黄色くマーキングされますので、コードを再確認しましょう。

スポンサードリンク

最後に

VBA(Excelマクロ)のWorksheetsについて解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました