所以我试着为我的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***"
答案 0 :(得分:4)
为什么不使用OR
来简化
尝试将{2-4}条件替换为IF
并AND
If myArray(y, 1) <> "" And myArray(y, 2) <> "" And myArray(y, 3) <> "" Then
答案 1 :(得分:1)
运行不断增加的IF测试以检查每个元素会变得混乱。
另一种选择是
使用Index
切割数组的每一行(在下面的示例中,我Transpose
循环外部的数组,因此Index
切片行而不是列)
Tranpose
用于将行切片转换为1D数组
Join
创建一行Len
然后测试行是否为空(如果字符串为零长度)码
`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
答案 2 :(得分:0)
Exit For
明确终止For
循环,而不是继续循环的下一个循环。 Excel VBA没有Continue
-type选项可以跳到循环的下一次迭代,因此您需要自己处理。
为了便于阅读,我经常编写故障条件,然后在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***"
&#13;
因为它不具有描述性并且可能与单元格属性混淆,所以我也不会有一个名为Value
的变量。
答案 3 :(得分:0)
以下是您可能会使用的想法: 我正在做的是添加一个如果仅在三条线都不为空的情况下执行的话。如果其中任何一个为空,则for-loop不会做任何事情,只是跳到下一个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***"