- 「テキスト通りに書いたはずなのに、Worksheets と Sheets という2つの書き方が出てきて混乱している……」
- 「どっちを使っても動くみたいだけど、あとでエラーになったら怖い……」
そんなふうに感じたことはありませんか?
私もVBAを始めたばかりの頃、この2つの違いがわからず、とりあえず名前のわかりやすさで使っていたことがあります。
今日は、「Worksheets」と「Sheets」の違いと、実務でどちらを使うべきかを解説します。
結論:初心者は「Worksheets」を使おう
最初に答えを言うと、実務でExcel VBAを使う場合、99%のケースで Worksheets を使えばOKです。
その方が圧倒的に安全だからです。
では、なぜ Sheets だと危険なのか? その理由を見ていきましょう。
決定的な違いは「含まれる範囲」
2つの違いを一言で言うと、「ターゲットにしている範囲」が違います。
- Worksheets:普通の「ワークシート(方眼紙のようなセルがあるシート)」だけを指します。
- Sheets:ワークシートに加えて、「グラフシート」なども含めたすべてのシートを指します。
つまり、Sheets を使ってループ処理(繰り返し)をしたとき、もしブックの中に「グラフシート」が混ざっていると、「グラフにはセルがないから書き込めないよ!」とエラーが出て、マクロが停止してしまうのです。
コピペで確認!エラーを体験してみよう
百聞は一見にしかず。実際にどのような違いが出るか、簡単なコードで見てみましょう。
1. エラーが出るコード(Sheetsを使用)
※これはエラーを確認するためのコードです。事前にExcelで、普通のシートと、「グラフシート(F11キーを押すと作れます)」を作っておいてください。
Sub Test_Sheets()
Dim sh As Object
' 全部のシート(グラフシート含む)を対象にする
For Each sh In Sheets
' セルA1に文字を入れようとする
sh.Range("A1").Value = "こんにちは"
Next sh
End Sub
これを実行すると、グラフシートの順番が来たときに「オブジェクトは、このプロパティまたはメソッドをサポートしていません」という冷たいエラーメッセージが出ます。これが出ると心臓に悪いですよね。
2. 安全なコード(Worksheetsを使用)
Sub Test_Worksheets()
Dim ws As Worksheet
' ワークシート(セルがあるシート)だけを対象にする
For Each ws In Worksheets
' グラフシートは自動的に無視されるのでエラーにならない
ws.Range("A1").Value = "こんにちは"
Next ws
MsgBox "すべてのワークシートに書き込みました!"
End Sub
こちらならグラフシートがあっても無視してくれるので、エラーにならず最後まで処理が走ります。
使い分けルール
使い分けルールはこれだけです。
- データの集計・転記・入力など、セルを操作するなら Worksheets 一択。
- シートの削除や並べ替えなど、シートの種類に関係なく丸ごと操作したい時だけ Sheets を使う。
「迷ったら Worksheets」。これさえ覚えておけば、予期せぬエラーでパニックになることはありません。
最後に
最初は「文字数が少ないから Sheets の方が楽!」と思いがちです。私もそうでした。
でも、プログラミングにおいて本当に大切なのは、打つ文字数の少なさよりも「予期せぬ事故が起きない安全性」です。
まずは Worksheets を使って、安心・安全なマクロをつくりましょう!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント