Могу ли я упростить оператор if для формулы Airtable? - PullRequest
1 голос
/ 19 марта 2019

Я довольно новичок в написании формул для манипулирования данными.Я использую Airtable для сбора отзывов об опросах и присваиваю каждому ответу категорию на основе 2 предоставленных баллов.Каждый или два балла могут быть -4, -2, 0, 2 или 4. В зависимости от комбинации баллов ответ будет разделен на одну из шести категорий.

Для этого я написал формулу If / And (которая работает), но мне интересно, есть ли более простой и понятный способ добиться этого:

IF(AND({Functional score}=4,{Dysfunctional score}=4),"Q",
IF(AND({Functional score}=-4,{Dysfunctional score}=-4),"Q",
IF(AND({Functional score}=2,{Dysfunctional score}=2),"Q",
IF(AND({Functional score}=-2,{Dysfunctional score}=-2),"Q",
IF(AND({Functional score}=0,{Dysfunctional score}=0),"I",
IF(AND({Functional score}=4,{Dysfunctional score}=2),"A",
IF(AND({Functional score}=4,{Dysfunctional score}=0),"A",
IF(AND({Functional score}=4,{Dysfunctional score}=-2),"A",
IF(AND({Functional score}=4,{Dysfunctional score}=-4),"P",
IF(AND({Functional score}=2,{Dysfunctional score}=4),"R",
IF(AND({Functional score}=2,{Dysfunctional score}=0),"I",
IF(AND({Functional score}=2,{Dysfunctional score}=-2),"I",
IF(AND({Functional score}=2,{Dysfunctional score}=-4),"M",
IF(AND({Functional score}=0,{Dysfunctional score}=4),"R",
IF(AND({Functional score}=0,{Dysfunctional score}=2),"I",
IF(AND({Functional score}=0,{Dysfunctional score}=-2),"I",
IF(AND({Functional score}=0,{Dysfunctional score}=-4),"M",
IF(AND({Functional score}=-2,{Dysfunctional score}=4),"R",
IF(AND({Functional score}=-2,{Dysfunctional score}=2),"I",
IF(AND({Functional score}=-2,{Dysfunctional score}=0),"I",
IF(AND({Functional score}=-4,{Dysfunctional score}=4),"R",
IF(AND({Functional score}=-4,{Dysfunctional score}=2),"R",
IF(AND({Functional score}=-4,{Dysfunctional score}=0),"R",
IF(AND({Functional score}=-4,{Dysfunctional score}=-2),"R",
"Q"))))))))))))))))))))))))

СпасибоВам за помощь!

1 Ответ

5 голосов
/ 19 марта 2019

Существует множество способов сделать это в Excel. Поскольку этот вопрос помечен формулой Excel, я предоставлю некоторые варианты с использованием формул Excel.

Первые два варианта будут зависеть от размещения ваших результатов в матрице. Это работает, потому что у вас есть две опции: ФУНКЦИОНАЛЬНАЯ и ДИСФУНКЦИОНАЛЬНАЯ

В этом примере предполагается, что данные располагаются следующим образом:

Example Table

Вариант 1

Используйте комбинацию INDEX и MATCH. Формула INDEX вернет адрес ячейки / диапазона для данной строки и номер столбца для выбранного диапазона. Используется следующий формат:

INDEX(SELECTED RANGE,ROW NUMBER, COLUMN NUMBER)

Важно отметить, что номер строки и номер столбца относятся к выбранному диапазону, а не к столбцу рабочего листа. Единственный случай, когда это будет одинаково для обоих, это если выбранный диапазон начался в A1.

Исходя из этой информации, начало формулы будет выглядеть так:

=INDEX($D$4:$H$8,

Поскольку я обычно не хочу, чтобы выбранный диапазон менялся при копировании в другую ячейку, у меня есть привычка блокировать ссылки на ячейки диапазона с помощью $.

Следующая необходимая часть - указать номер строки. Для этого функция MATCH работает хорошо. Функция MATCH будет искать заданное значение в определенном диапазоне и возвращать его положение в этом диапазоне. Вы также можете установить тип поиска, который вы хотите, в терминах приближенного и ближайшего типа поиска или обратного ближайшего к функции ... обратите внимание, что для работы последних двух необходимо отсортировать диапазон, и для позже для работы этот диапазон должен быть отсортирован в обратном порядке. Общий формат MATCH выглядит следующим образом:

MATCH(WHAT YOU ARE LOOKING FOR, RANGE TO LOOK, SEARCH OPTION)

В нашем случае вы хотите сопоставить оценку дисфункции. В этом случае дисфункциональная оценка находится в ячейке D12. Поэтому формула MATCH должна выглядеть следующим образом:

=MATCH($D$12,$C$4:$C$8,0)

0 в конце говорит MATCH, что требуется точное совпадение. Поскольку это возвращает номер строки, его можно поместить непосредственно в формулу INDEX для номера строки, и теперь формула выглядит следующим образом:

=INDEX($D$4:$H$8,MATCH($D$12,$C$4:$C$8,0),

Теперь необходимо определить номер столбца. Опять же, можно использовать функцию MATCH, и на этот раз диапазон для просмотра будет горизонтальным, а не вертикальным. Поскольку функциональная оценка указана в D11, формула должна выглядеть следующим образом:

=MATCH($D$11,$D$3:$H$3,0)

Поскольку это возвращает номер столбца выбранного диапазона, мы можем вывести его непосредственно в нашу формулу INDEX, которая заканчивается и выглядит следующим образом:

=INDEX($D$4:$H$8,MATCH($D$12,$C$4:$C$8,0),MATCH($D$11,$D$3:$H$3,0))

Вариант 2

Эта опция очень похожа и работает с использованием INDEX и небольшим количеством математических манипуляций, основанных на ваших очень специфических параметрах оценки. Таблица очень специфична для этого примера, переходя от наименьшего к наибольшему. Также все ваши оценки делятся на 2, чтобы получить приращение 1 между счетами, -2, -1, 0, 1, 2. Теперь, если вы добавите 3 к этому, вы получите 1, 2, 3, 4, 5, что случается, чтобы соответствовать вашим параметрам для строк и столбцов. Таким образом, если мы заменим MATCH из варианта 1 на немного математики, тогда формула INDEX станет:

=INDEX($D$4:$H$8,$D$12/2+3,$D$11/2+3)

Вариант 3

Это просто вложенный IF, похожий на ваш, но он группирует результаты вместе, а не перечисляет каждую отдельную опцию ячейки. Логика отдельных IF функций не работает сама по себе. Однако они работают в том порядке, в котором они вложены, поскольку, если условие TRUE приводит к одной из предыдущих функций IF, возвращается буква, а остальные уровни функции IF не проверяются. Множество вложенных функций IF может быть трудно читать, не говоря уже о том, что его трудно поддерживать, когда вы вернетесь через месяц или больше и попытаетесь выяснить, что вы сделали. Еще хуже для бедного сока, который читает его впервые, пытаясь выяснить, что происходит. Поэтому вложенная IF функция, объединяющая ваши результаты, может выглядеть следующим образом:

=IF(AND(D11=D12,D11<>0),"Q",IF(OR(D11=-4,D12=4),"R",IF(AND(D11=4,D12=-4),"P",IF(D12=-4,"M",IF(D11=4,"A","I")))))

PROOF OF CONCEPT

Есть и другие опции, которые могут использовать функции массива.И если у ваших данных было более 2-х вариантов (ФУНКЦИОНАЛЬНЫЕ / ДИСФУНКЦИОНАЛЬНЫЕ), то есть другие варианты размещения данных.Для Excel я бы порекомендовал использовать таблицу для удобочитаемости и удобства обслуживания, но вам нужно будет решить, что лучше всего подходит для вашей ситуации.

Настройте ссылки на ячейки и диапазоны в соответствии со своими потребностями.

Опция4

Используйте AGGREGATE, чтобы выполнить МАТЧ.Так как AGGREGATE возвращает номер столбца рабочего листа, его необходимо настроить на выбранный диапазон, вычитая номер строки / столбца заголовка.Без каких-либо дополнительных объяснений формула:

=INDEX($D$4:$H$8,AGGREGATE(15,6,ROW($C$4:$C$8)/($C$4:$C$8=$D$12),1)-ROW($C$3),AGGREGATE(15,6,COLUMN($D$3:$H$3)/($D$3:$H$3=$D$11),1)-COLUMN($C$3))
...