如何为我的`IF`块使用两个条件?

时间:2014-08-25 08:15:45

标签: excel vba excel-vba

我在使用If创建双重条件时遇到问题,所以这就是我隐藏行的原因:

If Target.Address = "$D$35" Then
    If (Target.Value = "No") Then
        ActiveSheet.Range("37:40").Rows.Hidden = False
    End If
    If (Target.Value = "Yes") Then
        ActiveSheet.Range("37:40").Rows.Hidden = True
    End If
End If

现在,我想为此公式添加另一个条件,让我们说那个单元格$D$35需要" No" 和Cell { {1}}需要"完成" 才能使隐藏功能正常工作。

如何将此插入现有公式?

2 个答案:

答案 0 :(得分:1)

1。您可以将And用于多个条件(参见@jonrsharpe评论)
实际上看看Or等其他逻辑运算符...... Logical and Bitwise Operators

2。为什么不使用If\ElseIf\Else
很明显,如果Target.Value = "No" true ,则无需测试Target.Value = "Yes" ...

所以就这样做:

If cond1 And cond2 Then
    ' Some code
ElseIf cond3 And cond4 Then '<--editted
    ' Some code
Else
    ' Some code
End If

示例:

我们假设您要对单元格D35($ D $ 35)和D36的值进行处理可以这样做:

If Range("D35")= "No" And Range("D36")= "No" Then
    ActiveSheet.Range("37:40").Rows.Hidden = False
ElseIf Range("D35")= "Yes" And Range("D36")= "done" Then
    ActiveSheet.Range("37:40").Rows.Hidden = True
End If

而不是

If Target.Address = "$D$35" Then
    If (Target.Value = "No") Then
        ActiveSheet.Range("37:40").Rows.Hidden = False
    End If
    If (Target.Value = "Yes") Then
        ActiveSheet.Range("37:40").Rows.Hidden = True
    End If
End If

注意1:这假设您正在处理正确的工作表

注2:这不是最好的办法...

答案 1 :(得分:0)

首先,它不是一个公式,它是一个子程序。其次,您不必拥有多个IF块。只需一个即可。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("D35:D36")) Is Nothing Then
        ActiveSheet.Range("37:40").Rows.Hidden = (Range("D35").Value = "No" And Range("D36").Value = "Done")
    End If

End Sub

按顺序解释一下:

    如果在If Not Intersect(Target, Range("D35:D36")) Is NothingTRUE中检测到更改,则
  1. D35会返回D36。如果您希望条件检查非连续范围,请在要检查的范围上使用Union
  2. 如果满足两个条件,则
  3. (Range("D35").Value = "No" And Range("D36").Value = "Done")评估为TRUE,否则为FALSE。然后,我们将其用作给定范围的Hidden属性的布尔触发器。
  4. 希望这有帮助。