我想将带有14列的Excel文件重新分发到正确的列(包含12.000行)。
为此,我必须使用一些If And Or语句将数字放在矩阵中。但显然我没有从中得到正确的东西。
它使我的所有单元格都为零,而具有值的单元格应保持该值。
我哪里出错?:
For i = 1 To LastRow
If Cells(i, 8).Value2 = "" Then Cells(i, 8).Value2 = 0
If Cells(i, 1).Value2 < 437 And Cells(i, 5).Value2 = "aa" _
Or Cells(i, 5).Value2 = "bb" _
Or Cells(i, 5).Value2 = "cc" _
Or Cells(i, 5).Value2 = "dd" _
Or Cells(i, 5).Value2 = "ee" _
Or Cells(i, 5).Value2 = "ff" _
Or Cells(i, 5).Value2 = "gg" _
And Cells(i, 7).Value2 = "" _
Then Cells(i, 7).Value2 = 0
Next i
因此,如果单元格包含aa或bb或cc或dd或ee或ff或gg且为empty,则单元格应为0,否则应保持相同的值。之后它应该进入矩阵
Then Matrixgetallen(i, 2) = CDbl(Cells(i, 7).Value2)
但我没有设法在同一个if语句中得到它。
如果有这样的If语句中的6个,那么可能如果那么其他的话也不起作用。
答案 0 :(得分:6)
在没有看到完整代码的情况下很难进行优化,但是对于这一部分:
AND
分为两个IF
作为VBA doesn't short circuit OR
s,对数组进行单次测试(数字结果表示找到了确切的字符串)码
i = 1
Dim strIN
strIN = Array("aaf", "bb", "cc", "dd", "ee", "ff", "gg")
If Cells(i, 1).Value2 < 437 Then
If Len(Cells(i, 5)) = 0 Then
Cells(i, 7).Value2 = 0
Else
If IsNumeric(Application.Match(Cells(i, 5), strIN, 0)) Then Cells(i, 7).Value2 = 0
End If
End If
答案 1 :(得分:0)
感谢您提示Axel。我以前从未见过这个,但效果很好!这就是诀窍:
If Cells(i, 1).Value2 < 437 And (Cells(i, 5).Value2 = "aa" _
Or Cells(i, 5).Value2 = "bb" _
Or Cells(i, 5).Value2 = "cc" _
Or Cells(i, 5).Value2 = "dd" _
Or Cells(i, 5).Value2 = "ee" _
Or Cells(i, 5).Value2 = "ff" _
Or Cells(i, 5).Value2 = "gg") _
And Cells(i, 7).Value2 = "" _
Then Cells(i, 7).Value2 = 0
但我也非常喜欢布雷特的答案。这是一种很好的新方法。