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