Оператор if для запуска на основе различных критериев, превышающих 0 - PullRequest
0 голосов
/ 08 ноября 2018

Я пишу оператор 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

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

(это не проверено)

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
0 голосов
/ 08 ноября 2018

Вот еще одна идея:

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
0 голосов
/ 08 ноября 2018

Вы можете использовать оценку по массиву критериев с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...