Необходимо преобразовать Excel IF и заявление в VBA - PullRequest
0 голосов
/ 08 июля 2019

У меня есть длинная инструкция IF и в Excel (превышающая лимит), которую мне нужно конвертировать в VBA, но я не могу заставить ее работать.

У меня есть два столбца текстовых списков (C & D), в которых я хочу определить результирующий уровень риска в столбце E.

оператор IF AND, который я придумал, это дляодна ячейка:

=IF(AND(C2="Improbable",D2="Acceptable"),"Low",IF(AND(C2="Improbable",D2="Tolerable"),"Medium",IF(AND(C2="Improbable",D2="Unacceptable"),"High",IF(AND(C2="Improbable",D2="Undesirable"),"Medium",IF(AND(C2="Possible",D2="Acceptable"),"Low",IF(AND(C2="Possible",D2="Tolerable"),"Medium",IF(AND(C2="Possible",D2="Unacceptable"),"Critical",IF(AND(C2="Possible",D2="Undesirable"),"High",IF(AND(C2="Probable",D2="Acceptable"),"Medium",IF(AND(C2="Probable",D2="Tolerable"),"HIgh",IF(AND(C2="Probable",D2="Unacceptable"),"Critical",IF(AND(C2="Possible",D2="Undesirable"),"High",""))))))))))))

, и это работает, но слишком много операторов IF для excel.

Какой-нибудь совет, как преобразовать это в VBA и для всего столбца?

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Мой путь - использовать мультипликативные значения (по крайней мере, так мне пришлось изучать FMEA).Вы даете каждому уровню значение, умножаете их, и тогда вы должны получить желаемый результат.Ниже приведен пример, вам, возможно, придется немного подправить значения, но в ваших Учебниках должны быть примеры и т. Д.

Option Explicit

Public Function getSeverityLevel(ByVal mode As String, ByVal effect As String) as String
    Dim modeVal As Long
    Dim effectVal As Long
    Dim riskVal As Long

    Select Case mode
        Case "Improbable":  modeVal = 1
        Case "Possible":    modeVal = 2
        Case "Probable":    modeVal = 3
    End Select

    Select Case effect
        Case "Acceptable":  effectVal = 1
        Case "Tolerable":   effectVal = 2
        Case "Undesirable": effectVal = 4
        Case "Unacceptable": effectVal = 8
    End Select

    riskVal = modeVal * effectVal
    Select Case riskVal
        Case 1
            getSeverityLevel = "Low"
        Case 2 To 5
            getSeverityLevel = "Medium"
        Case 6 To 11
            getSeverityLevel = "High"
        Case 12 To 24
            getSeverityLevel = "Critical"
        Case Else
            getSeverityLevel = "Undefined"    
    End Select

End Function

Выход:
enter image description here

Поле с Low, Medium и т. Д. Содержит код =getSeverityLevel($A2;B$1) и т. Д. Вы можете подключить любые два поля в функцию.Если для вызова функции используется недопустимое значение, она должна вернуть «Не определено».

0 голосов
/ 08 июля 2019

Создать пользовательскую функцию

Public Function ReturnRiskLevel(c as range,d as range) as string


Select case c
      case ="Improbable"
           select case D
              case ="Acceptable" 
                  ReturnRiskLevel = "Low"
               case ="Tolerable" , "Undesirable"
                   ReturnRiskLevel = "Medium"
               case ="Unacceptable" 
                    ReturnRiskLevel ="High"


             end select
    case = "Possible"
           select case D
              case ="Acceptable" 
                  ReturnRiskLevel = "Low"
               case ="Tolerable" 
                   ReturnRiskLevel = "Medium"
               case ="Unacceptable"
                   ReturnRiskLevel = "Critical",
               case = "Undesirable"
                    ReturnRiskLevel ="High"
           end select
           'etc
     end select
   end function

затем вы используете его в электронной таблице как = ReturnRiskLevel (c2, d2), а затем копируете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...