我正在编写一个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