Home » いちばんやさしいExcel VBAの教本 » シート名一覧作成をFor Each~Next文で

対象:Excel 2010, Excel 2013, Windows版Excel 2016

For Each~Next文のほうがFor~Next文よりシンプルに書ける場合の例をご紹介しました。

この例をご覧になって、どのような処理でもFor Each~Next文のほうがシンプルになるとは、思いこまないでください。

例えば『いちばんやさしいExcel VBAの教本』の、Lesson 69「ワークシート名一覧を作成するマクロを作ってみましょう」で作成しているSubプロシージャの場合、

ワークシート名一覧を作成する

For Each~Next文で書くよりも、For~Next文のほうがシンプルなコードで済みます。

シート名一覧作成をFor Each~Next文で書いたサンプルマクロ

アクティブなブックの先頭にワークシートを追加して、もともと存在していたシートの名前をA1セルから下方向に書き出すSubプロシージャを、あえてFor Each~Next文で書くと以下のようになります。

Sub ワークシート名一覧を作成する()
 Dim sh As Worksheet
 Dim n As Long

 Worksheets.Add Before:=Worksheets(1)
 n = 1
 For Each sh In Worksheets
  If sh.Index <> 1 Then
   Cells(n, "A").Value = sh.Name
   n = n + 1
  End If
 Next sh
End Sub

サンプルマクロの解説

For~Next文の場合は、拙著でご紹介している、
  For i = 2 to Worksheets.Count
のように初期値の指定で、挿入したばかりの1枚目のワークシートを除外できますが、For Each~Next文の場合、すべてに対してループ処理が行われるので、
  For Each sh In Worksheets
   If sh.Index <> 1 Then
のようにIf文で条件分岐する必要があります。

「sh.Index」は、WorksheetオブジェクトのIndexプロパティで、何枚目のワークシートかを取得しているコードです。

For~Next文の場合、
  For i = 2 to Worksheets.Count
の行で省略されている「Step 1」で、カウンター変数iが1ずつ加算されますが、For Each~Next文の場合は、
   n = n + 1
のような加算処理を書く必要があります。

For~Next文とFor Each~Next文の区別が明確になっていないレベルの方の場合、こういった加算処理が不要なのに入れてしまったり、必要なのに入れ忘れてしまったりしがちです。

[スポンサードリンク]

Home » いちばんやさしいExcel VBAの教本 » シート名一覧作成をFor Each~Next文で

「いちばんやさしいExcel VBAの教本」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.