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



我正在编写一个if语句,根据它们是否大于零,有5个单独的条件。

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

我主要追求的是:

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

(这是未经测试的(

Dim c as long
c = 0
If criteria1 = 0 then CritNo = CritNo + 1
If criteria2 = 0 then CritNo = CritNo + 1
If criteria3 = 0 then CritNo = CritNo + 1
If criteria4 = 0 then CritNo = CritNo + 1
If criteria5 = 0 then CritNo = CritNo + 1
If criteria6 = 0 then CritNo = CritNo + 1
Select case CritNo 
Case 1
Do stuff
Case 2
Do other stuff
...
Case Else
Do nothing
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

您可以使用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

最新更新