检测行中的所有数组元素是否为空

所以即时通讯试图为我的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 IFAND组合

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没有一个Continuetypes选项来跳到循环的下一个迭代,所以你需要自己处理。

为了便于阅读,我经常编写失败条件,然后按照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***"