Альтернатива оператору IIf в MS Access

У меня есть оператор IIf, который должен делать то, что я хочу, но он слишком сложен, поэтому мне нужен альтернативный способ написания этого кода. Я пробовал оператор switch, но у меня та же проблема. Назначение кода трудно объяснить, но я постараюсь сделать его простым, так как понял, что контекст важен при поиске решений.

По сути, я использую запрос для вывода таблицы данных, которую можно использовать в качестве макета матрицы. Его необходимо настроить, например, 5x5, 7x7, 10x10 и т. д., а отображаемые значения должны измениться, чтобы отразить размеры. Одна из таблиц, из которых извлекается запрос, представляет собой просто числовые значения, сумму которых я использую для определения вывода этого поля. Также имеется поле с пометкой «[Размер матрицы]», определяющее размеры. В конце концов, это также будет определять, какая информация будет отображаться на основе этих измерений, но я еще не зашел так далеко. Чрезмерно сложные операторы IIf выглядят следующим образом.

    IIf([Matrix Size]<=0," ",
        IIf([Impact]=0,"1",
            IIf([Impact]+[Likelihood]=2,"Low",
                IIf([Matrix Size]<2," ",
                   IIf([Impact]+[Likelihood]=3,"Low", 
                       IIf([Matrix Size]<3," ",
                          IIf([Impact]+[Likelihood]=4,"Low",
                             IIf([Matrix Size]<4," ",
                                IIf([Impact]+[Likelihood]=5,"Low",
                                   IIf([Matrix Size]<5," ",
                                       IIf([Impact]+[Likelihood]=6,"Low",
                                          IIf([Matrix Size]<6," ",
                                             IIf([Impact]+[Likelihood]=7,"Low",
                                                IIf([Matriz Size]<7," ",
                                                  IIf([Impact]+[Likelihood]=8,"Low","Error")))))))))))))))

Если кто-нибудь знает способ упростить этот/альтернативный способ сделать это, который не будет слишком сложным для доступа, пожалуйста, дайте мне знать. Любая помощь приветствуется.

Для ясности, если необходимо:

Второй IIf используется для установки первой строки в «1», чтобы действовать как одно из числовых значений вдоль горизонтальной строки. Операторы воздействия+вероятности определяют, должно ли поле отображать значение «Низкий», «Средний» или «Высокий», но на данный момент «Низкий» является просто заполнителем, а операторы размера матрицы определяют, должно ли оно быть пустым или не на основе желаемых размеров.


person Roland    schedule 17.05.2018    source источник
comment
Похоже, вам нужна таблица поиска, потому что этот код - бананы. Таблица поиска — это просто массив.   -  person tadman    schedule 17.05.2018
comment
@tadman Можно ли изменить массив так, как мне нужно? Раньше я мало что делал с массивами, поэтому я не уверен, каковы его возможности.   -  person Roland    schedule 17.05.2018
comment
Массив — это просто список вещей, и хорошая вещь в массиве — это концепция, с которой ваш код может работать, используя несколько строк вместо того, чтобы вам приходилось расшифровывать вещи шаг за шагом. Лучше всего начать с документации. . Вы можете создать массив, который отображает 0 в "1", 1 в "2", 2 в "Low" и так далее, что легко, потому что массивы имеют нулевой индекс.   -  person tadman    schedule 17.05.2018
comment
Если вы не можете сделать таблицу поиска из-за сложности правил, напишите функцию VBA.   -  person SunKnight0    schedule 18.05.2018


Ответы (1)


Альтернатива, которую вы ищете, это switch():

switch([Matrix Size] <= 0, " ",
       [Impact] = 0, "1",
       [Impact] + [Likelihood] = 2, "Low",
       . . .
       "Error"
      )  -- only one paren needed!

К сожалению, ваши условия представляют собой смесь, основанную на трех столбцах, поэтому таблица поиска будет немного громоздкой.

person Gordon Linoff    schedule 17.05.2018
comment
Вместо этого я попытался использовать переключатель, но у переключателя была та же проблема, что и у оператора IIf, слишком сложный. - person Roland; 17.05.2018