Excel 基于大于0的各种条件量运行的if语句

Excel 基于大于0的各种条件量运行的if语句,excel,vba,Excel,Vba,我正在写一个if语句,其中有5个独立的标准,基于它们是否大于零 我想要6个独立的if语句,基于0条件是否>0,1条件是否>0,2等等。。。最多5个条件>0。我试图用OR和语句来实现这一点,但这显然不是解决方案 我的主要目标是: If 0 Criteria > 0 Then Do this ElseIf 1 Criteria > 0 Then Do this ElseIf 2 Criteria > 0 Then Do this .... ElseIf 5

我正在写一个if语句,其中有5个独立的标准,基于它们是否大于零

我想要6个独立的if语句,基于0条件是否>0,1条件是否>0,2等等。。。最多5个条件>0。我试图用OR和语句来实现这一点,但这显然不是解决方案

我的主要目标是:

If 0 Criteria > 0 Then
    Do this
ElseIf 1 Criteria > 0 Then
    Do this
ElseIf 2 Criteria > 0 Then
    Do this
....
ElseIf 5 Criteria > 0 Then
    Do this
End If

您可以使用SUMPRODUCT对一系列标准进行评估

Option Explicit
Public Sub test()
    Dim criteria1 As Long, criteria2 As Long,criteria3 As Long
    Dim criteria4 As Long, criteria5 As Long, arr()
    Dim numGreaterThanZero As Long

    criteria1 = -1
    criteria2 = 3
    criteria3 = 0
    criteria4 = 5
    criteria5 = 6

    arr = Array(criteria1, criteria2, criteria3, criteria4, criteria5)

    numGreaterThanZero = Application.Evaluate("=SUMPRODUCT(--({" & Join$(arr, ";") & "}>0))")

    Select Case numGreaterThanZero

    Case 1
    Case 2
    Case 3
    Case 4
    Case 5

    End Select
End Sub

如果您实际上只想单独测试条件(而不是累计计数),并首先退出True,则:

Select Case True

Criteria1 > 0
'Do Something

Criteria2> 0
'Do something else

End Select

您可以使用SUMPRODUCT对一系列标准进行评估

Option Explicit
Public Sub test()
    Dim criteria1 As Long, criteria2 As Long,criteria3 As Long
    Dim criteria4 As Long, criteria5 As Long, arr()
    Dim numGreaterThanZero As Long

    criteria1 = -1
    criteria2 = 3
    criteria3 = 0
    criteria4 = 5
    criteria5 = 6

    arr = Array(criteria1, criteria2, criteria3, criteria4, criteria5)

    numGreaterThanZero = Application.Evaluate("=SUMPRODUCT(--({" & Join$(arr, ";") & "}>0))")

    Select Case numGreaterThanZero

    Case 1
    Case 2
    Case 3
    Case 4
    Case 5

    End Select
End Sub

如果您实际上只想单独测试条件(而不是累计计数),并首先退出True,则:

Select Case True

Criteria1 > 0
'Do Something

Criteria2> 0
'Do something else

End Select
(这是未经测试的)

(这是未经测试的)

还有一个想法:

Select Case Abs(criteria1 > 0) + Abs(criteria2 > 0) + Abs(criteria3 > 0) + Abs(criteria4 > 0) + Abs(criteria5 > 0)
   Case 0
      MsgBox "0 criteria"
   Case 1
      MsgBox "1 criteria"
   Case 2
      MsgBox "2 criteria"
   Case 3
      MsgBox "3 criteria"
   Case 4
      MsgBox "4 criteria"
   Case 5
      MsgBox "5 criteria"
End Select
还有一个想法:

Select Case Abs(criteria1 > 0) + Abs(criteria2 > 0) + Abs(criteria3 > 0) + Abs(criteria4 > 0) + Abs(criteria5 > 0)
   Case 0
      MsgBox "0 criteria"
   Case 1
      MsgBox "1 criteria"
   Case 2
      MsgBox "2 criteria"
   Case 3
      MsgBox "3 criteria"
   Case 4
      MsgBox "4 criteria"
   Case 5
      MsgBox "5 criteria"
End Select

对不起,我错过了当时的声明,愚蠢的错误!是的,我真的认为在发布后自上而下可能是最好的方式,因此它将绕过下一个elseif语句。谢谢,这取决于您是需要运行所有测试,还是只需要计算为True的第一个测试。哪一个?只有第一个答案是正确的,那就是我最初的答案,你当时想要的?选择案例陈述?我会补充的。对不起,我错过了当时的声明,愚蠢的错误!是的,我真的认为在发布后自上而下可能是最好的方式,因此它将绕过下一个elseif语句。谢谢,这取决于您是需要运行所有测试,还是只需要计算为True的第一个测试。哪一个?只有第一个答案是正确的,那就是我最初的答案,你当时想要的?选择案例陈述?我会再加进去。所以你有5个独立的数值变量,你想要一个不同的动作,这取决于有多少是0?这些条件,它们是工作表上的单元格吗?这些单元格是连续的吗?因此您有5个独立的数值变量,并且希望根据0的数量执行不同的操作?这些条件是工作表上的单元格吗?那些单元格是连续的吗?你也可以
-(criteria1>0)+-(…
你也可以
-(criteria1>0)+-(…