対象:Excel 2010, Excel 2013, Windows版Excel 2016
拙著『いちばんやさしいExcel VBAの教本』の、Lesson 43「For~Next文の繰り返し条件を使いこなしましょう」で、「Step -1」のように増分値をマイナスで指定できることに触れています。
どういうときに、For~Next文の増分値をマイナスにするほうがいいのか、補足しておきます。
行を削除するつもりで正しく動作しないサンプルマクロ
例えば何らかの条件によって行を削除するマクロは、実務で必要になりがちです。
この処理を、以下のようなコードにしてしまう入門者は少なくありません(問題の箇所を明確にするために条件分岐を除外しています)。
Sub 行を削除する_ダメなケース()
Dim i As Long For i = 1 To 5
Rows(i).Delete
Next i
End Sub
Dim i As Long For i = 1 To 5
Rows(i).Delete
Next i
End Sub
1行目から5行目が順番に削除されることを期待したSubプロシージャですが、この形では元の2行目と4行目が削除されずに残ってしまいます。
行を削除するサンプルマクロ
こういったときに増分値をマイナスにします。
以下のSubプロシージャなら、1~5行目が順番に削除されます。
Sub 行を削除する_OKなケース()
Dim i As Long For i = 5 To 1 Step -1
Rows(i).Delete
Next i
End Sub
Dim i As Long For i = 5 To 1 Step -1
Rows(i).Delete
Next i
End Sub
このようにループ処理する対象の数が、途中で減ってしまうようなときが、マイナスの増分値が有効な代表例です。
マイナスの増分値にしないと正しく動作しない理由を確認しておきましょう
マイナスの増分値にすれば、行を削除できることは実行すればわかるとして、先にご紹介した正しく動作しないほうのマクロで、何故ダメなのか、ご自分の手を動かして確認しておきましょう。
カウンタ変数iが「2」のときに、ワークシートがどういう状態になっているか、そのときに削除されるのかがどの行なのかをしっかり意識すればわかるはずです。
[スポンサードリンク]
- Newer:配列を値渡しするには
- Older:「ひとりしごとメルマガ入門セミナー」と「書く仕事セミナー」を受講して
Home » いちばんやさしいExcel VBAの教本 » For~Next文で増分値をマイナスにするとイイ実例