Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » VBAのFor~Next文で先頭シートを除外してループ処理

VBAのFor~Next文で先頭シートを除外してループ処理

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2112 ビルド14729.20260 Microsoft Store)

「for文 最初のシートだけ対象から場外」
といった検索キーワードでアクセスがありました。

「場外」は「除外」のtypoでしょうね。

Excel VBAのFor~Next文で、最初のシート(先頭シート・1枚目のシート)を除いてループ処理したいということでしょう。

プログラミングの経験がない方の場合、こういった部分でつまずくことは本当によくあります。

拙著『いちばんやさしいExcel VBAの教本』の、「Lesson 69 ワークシート名一覧を作成するマクロを作ってみましょう」でも、そのようなFor~Next文を解説しています。

先頭シートを除外してループ処理するFor~Next文のサンプル

以下のSubプロシージャを実行すると、アクティブなブックの2枚目のワークシートから最後のワークシートまで、順番に名前がメッセージボックスに表示されます。

Sub 先頭シートを除外してループ処理する()
 Dim cnt As Long
 Dim i As Long

 cnt = Worksheets.Count
 For i = 2 To cnt
  MsgBox Worksheets(i).Name
 Next i
End Sub

For~Next文の初期値・最終値

「for文 最初のシートだけ対象から場外」
と検索なさった方は、

For i = 1 To cnt
 MsgBox Worksheets(i).Name

といったFor~Nextループはご存知のはずです。
その初期値(Toの前の値)を、上記Subプロシージャのように「2」と指定してやれば、最初(先頭・1枚目)のワークシートを除外したループ処理になります。

For i = 2 To cnt
 MsgBox Worksheets(i).Name

また、最終値(Toの後ろの値)を変更して、

For i = 2 To cnt - 1
 MsgBox Worksheets(i).Name

と指定すれば、最初と最後のワークシートを除外したループ処理になります。

イメージしましょう・ステップ実行しましょう

カウンター変数iに、初期値(Toの前の値)から、最終値(Toの後ろの値)が順番に代入され、Forの行とNextの行の間に書かれているコードが繰り返し実行されることをイメージしましょう。

拙著でも多用しているショートカットキー[F8]を使ったステップ実行を行いましょう。

意識しましょう・イメージしましょう

上記の書き方を理解したら、「For i = 2 To cnt」には、数値を順番に変更する指示しか書かれていないことを意識してください。

「For i = 2 To cnt」には、変数iに2からcntの整数を順番に代入しなさいという指示しか書かれていません。

2からcntの整数が代入された変数iを、「Worksheets(i)」のようにFor~Next文の中で使うことで、2枚目から最後のワークシートまで順番に取得できることをイメージしてください。

最終更新日時:2022-02-10 15:55

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » VBAのFor~Next文で先頭シートを除外してループ処理

「Sheets・Worksheet」の記事一覧

検索


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

.