作者:手机用户2502930273 | 来源:互联网 | 2023-05-18 10:23
我想将带有14列的Excel文件重新分发到正确的列(具有12.000行).
为此,我必须使用一些If和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个,那么可能如果那么Else不起作用.
1> brettdj..:
很难优化而不会看到您的完整代码但是这部分:
由于VBA 没有短路,因此可以AND
分成两个IF
而不是长序列的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