如果我运行此代码,其中<>是运算符将该行的单元格与前一行的单元格进行比较,它永远不会结束并且将继续添加行而不会破坏符合条件的第一行。If语句永不结束如果使用<>运算符
Dim rRng As Range
Dim rCell As Range
Set rRng = Range("B2:B30")
For Each rCell in rRng.Cells
If InStr(1, rCell.Value, "Foo") = 2 And rCell.Value <> rCell.Offset(-1, 0).Value Then
rCell.EntireRow.Insert
EndIf
Next rCell
但是,如果我改变<>到=,它只会增加其中所述当前小区和前一小区的值是“foo”的行。
为什么添加多行?为什么它不会中断?
由于'rRng'随着每个插入的行而增长,并且当条件第一次遇到时不会退出循环。 – GSerg 2014-10-01 23:05:17
但是,当我使用=而不是<>时,它不会继续无限增长。它通过插入许多行来增长。为什么<>运算符会导致无限数量的插入,导致rRng不断增长? – 2014-10-01 23:06:45
因为当你在两个相邻行之间插入一行具有相同值的行时,可以打破在相邻行上有两个相等值的情况:你现在有一个空白行将它们分开,所以在下一次迭代中,'='将失败并停下来。相反,当你在两行之间添加一行时,其中一行是'Foo',另一行不行,这种不平等的情况就会被保留下来:'Foo'行现在被推下来,仍然不等于它的现在行,相邻的行(新插入的行),并在下一次迭代时触发'<>'。 – GSerg 2014-10-01 23:15:49