【VBA入門】「Worksheets」と「Sheets」の違いで迷うのは今日で終わり!安全な使い分け

【業務効率化】VBA
スポンサーリンク
  • 「テキスト通りに書いたはずなのに、Worksheets と Sheets という2つの書き方が出てきて混乱している……」
  • 「どっちを使っても動くみたいだけど、あとでエラーになったら怖い……」

そんなふうに感じたことはありませんか?

私もVBAを始めたばかりの頃、この2つの違いがわからず、とりあえず名前のわかりやすさで使っていたことがあります。

今日は、「Worksheets」と「Sheets」違いと、実務でどちらを使うべきかを解説します。

【業務効率化】VBAの記事を見る

結論:初心者は「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


こちらならグラフシートがあっても無視してくれるので、エラーにならず最後まで処理が走ります。

使い分けルール

使い分けルールはこれだけです。

  1. データの集計・転記・入力など、セルを操作するなら Worksheets 一択。
  2. シートの削除や並べ替えなど、シートの種類に関係なく丸ごと操作したい時だけ Sheets を使う。

「迷ったら Worksheets」。これさえ覚えておけば、予期せぬエラーでパニックになることはありません。

最後に

最初は「文字数が少ないから Sheets の方が楽!」と思いがちです。私もそうでした。

でも、プログラミングにおいて本当に大切なのは、打つ文字数の少なさよりも「予期せぬ事故が起きない安全性」です。

まずは Worksheets を使って、安心・安全なマクロをつくりましょう!

【業務効率化】VBAの記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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