「for文 最初のシートだけ対象から場外」
といった検索キーワードでアクセスがありました。
「場外」は「除外」のtypoでしょうね。
Excel VBAのFor~Next文で、最初のシート(先頭シート・1枚目のシート)を除いてループ処理したいということでしょう。
プログラミングの経験がない方の場合、こういった部分でつまずくことは本当によくあります。
拙著『いちばんやさしいExcel VBAの教本』の、「Lesson 69 ワークシート名一覧を作成するマクロを作ってみましょう」でも、そのようなFor~Next文を解説しています。
先頭シートを除外してループ処理するFor~Next文のサンプル
以下のSubプロシージャを実行すると、アクティブなブックの2枚目のワークシートから最後のワークシートまで、順番に名前がメッセージボックスに表示されます。
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
- Newer:データラベルの枠線をVBAで非表示に
- Older:SeriesCollection.Extendメソッドのサンプル
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » VBAのFor~Next文で先頭シートを除外してループ処理