Home » いちばんやさしいExcel VBAの教本 » For~Next文で増分値をマイナスにするとイイ実例

For~Next文で増分値をマイナスにするとイイ実例

対象: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

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

このようにループ処理する対象の数が、途中で減ってしまうようなときが、マイナスの増分値が有効な代表例です。

マイナスの増分値にしないと正しく動作しない理由を確認しておきましょう

マイナスの増分値にすれば、行を削除できることは実行すればわかるとして、先にご紹介した正しく動作しないほうのマクロで、何故ダメなのか、ご自分の手を動かして確認しておきましょう。

行を削除する_ダメなケース

カウンタ変数iが「2」のときに、ワークシートがどういう状態になっているか、そのときに削除されるのかがどの行なのかをしっかり意識すればわかるはずです。

[スポンサードリンク]

Home » いちばんやさしいExcel VBAの教本 » For~Next文で増分値をマイナスにするとイイ実例

TrackBack:2

TrackBack URL
1行で複数の変数を宣言する場合の注意点 from インストラクターのネタ帳
VBAで複数の変数を1行で宣言する場合、それぞれの変数で型指定を行う必要があります。
2重ループを難しいと感じたら変数名の「i」「j」をやめよう from インストラクターのネタ帳
2重ループを難しいと感じたら変数名を「i」「j」にするのをやめましょう。

Home » いちばんやさしいExcel VBAの教本 » For~Next文で増分値をマイナスにするとイイ実例

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

検索


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

.