检测行中的所有数组元素是否为空
所以即时通讯试图为我的excel spreedsheet写一些VBA。
我有一个四色的桌子,我读了每一行,我希望它跳过那一行,如果coloumn 1 2或3是空的,而是退出,并不移动到下一行。
For y = LBound(myArray) To UBound(myArray) If myArray(y, 1) = "" Then Exit For If myArray(y, 2) = "" Then Exit For If myArray(y, 3) = "" Then Exit For Attribute = "Animal" Value = myArray(y, 3) Value = myArray(y, 2) & "¦" & FoodFunc(Value) & "¦" & myArray(y, 4) Debug.Print Value Next y Debug.Print "***TEST FINISHED***"
为什么不简单通过使用OR
尝试更换您的行2-4条件由1 IF
与AND
组合
If myArray(y, 1) <> "" And myArray(y, 2) <> "" And myArray(y, 3) <> "" Then
运行不断增加的IFtesting来检查每个元素将变得混乱。
另一个select是
-
使用
Index
对数组的每一行进行切片(在下面的示例中,将数组转换到循环的外部,以便Index
对行进行切片而不是对列进行切片) -
Tranpose
用于将行切片转换为一维数组 -
Join
创build一个行的string -
Len
然后testing该行是否为空(如果该string是零长度)
码
`test array myArray = [a1:d100] myArr2 = Application.Transpose(myArray) With Application For y = LBound(myArray) To UBound(myArray) If Len(Join(.Transpose(.Index(myArr2, , y)))) = 0 Then `row is empty Else `plan b End If Next y End With
Exit For
附加到你的每个条件,明确地终止了For
循环,而不是继续循环的下一个循环。 Excel VBA没有一个Continue
types选项来跳到循环的下一个迭代,所以你需要自己处理。
为了便于阅读,我经常编写失败条件,然后按照Else
条款在可接受的条件下运行代码:
For y = LBound(myArray) To UBound(myArray) If myArray(y, 1) = "" Or myArray(y, 2) = "" Or myArray(y, 3) = "" Then ' unsuitable for action Else Attribute = "Animal" Value = myArray(y, 3) Value = myArray(y, 2) & "¦" & FoodFunc(Value) & "¦" & myArray(y, 4) Debug.Print Value ' TODO: take useful action on the generated string End If Next y Debug.Print "***TEST FINISHED***"
这里有一个你可能会用到的想法:我正在做的是添加一个if,只有当三行中没有一行是空的时才执行。 如果它们中的任何一个都是空的,则for循环将不会执行任何操作,只是跳到下一个y。
For y = LBound(myArray) To UBound(myArray) If not(myArray(y, 1) = "" or myArray(y, 2) = "" or myArray(y, 3) = "") Then Attribute = "Animal" Value = myArray(y, 3) Value = myArray(y, 2) & "¦" & FoodFunc(Value) & "¦" & myArray(y, 4) Debug.Print Value End If Next y Debug.Print "***TEST FINISHED***"