1

現在 for ループで、VBA の範囲を反復処理しています。特定の基準を満たしたときに範囲から値を削除する if ステートメントがありますが、これを行うと範囲内の次の値がスキップされます。

Java で配列とイテレータを使用してこれを回避できることはわかっていますが、VBA にはこのようなものがありますか?

4

1 に答える 1

1

行を削除するときは逆方向に反復する必要があるため、for代わりにループを使用する必要がありますfor each

範囲内の最後の行に設定iしてから追加step -1して、ループがデクリメントするようにしますi

正常for eachに動作しないサンプル

dim cell as Range
for each cell in Range("A1:A100")
    if isEmpty(cell) then cell.delete shift:=xlUp
next 

For行が空の場合に行を削除する置換ループ

dim i as long, lastRow as Long, firstRow as Long
lastRow = 100: firstRow = 1
dim cell as Range
for i = lastRow to firstRow step -1
    Set cell = Range("A" & i)
    if isEmpty(cell) then cell.Delete shift:=xlUp
    Set cell = Nothing
next i
于 2013-08-28T12:58:34.893 に答える