如何在VBA中的if语句中给出多个条件

时间:2015-03-25 04:49:06

标签: vba excel-vba excel

我写了一个VBA代码,当三个coloumn" d" ," E"和" F同时显示零值。如果它们中的任何一个具有非零值,则它不应该隐藏行。此外,我还想添加"#N / A"另外,就像#NA就像Zero一样,它应该隐藏行。

但似乎代码存在一些问题。请帮帮我。

Sub HideRows()
Application.ScreenUpdating = False
Application.Calculation = xlManual

For Each x In Range("D2:D2000")
Next
For Each y In Range("E2:E2000")
Next
For Each Z In Range("F2:F2000")
Next
If x.Value = 0 And y.Value = 0 And Z.Value = 0 Then x.EntireRow.Hidden = True

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:0)

欢迎来到网站!

您的语法不正确。循环For Each ... Next应该包含您想要重复的代码。由于你的循环里面没有任何东西,它绝对没有任何东西。我试着为你写一个可以理解的代码:

Sub HideRows()
Dim i as Long 'Counter
Application.ScreenUpdating = False
Application.Calculation = xlManual

With ActiveSheet
    For i = 2 To 2000
        If (.Range("D" & i).Value = 0 Or .Range("D" & i).Text = "#N/A") And _
           (.Range("E" & i).Value = 0 Or .Range("E" & i).Text = "#N/A") And _
           (.Range("F" & i).Value = 0 Or .Range("F" & i).Text = "#N/A") Then
        .Range("D" & i).EntireRow.Hidden = True
        End If
    Next
End With

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub

在示例中,您看到循环For ... Next包含一些代码,因此代码将完成,如您所见,1999年从2到2000计数。所有内容都包含在With ActiveSheet ... End With中声明。原因是使代码更具可读性,而不是重复ActiveSheet。如果您没有使用它,则必须编写完整的内容(.Range)而不是ActiveSheet.Range