如果在VBA中有或多个语句

Hel*_*ein 2 excel vba excel-vba

我想将带有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
Run Code Online (Sandbox Code Playgroud)

因此,如果单元格包含aa或bb或cc或dd或ee或ff或gg且为empty,则单元格应为0,否则应保持相同的值.之后它应该进入矩阵

Then Matrixgetallen(i, 2) = CDbl(Cells(i, 7).Value2)
Run Code Online (Sandbox Code Playgroud)

但我没有设法在同一个if语句中得到它.

如果有这样的If语句中的6个,那么可能如果那么Else不起作用.

bre*_*tdj 6

很难优化而不会看到您的完整代码但是这部分:

  1. 由于VBA 没有短路,因此可以AND分成两个IF
  2. 而不是长序列的ORs,对数组进行单次测试(数值结果表示找到了确切的字符串)

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
Run Code Online (Sandbox Code Playgroud)