Инструмент, помогающий писать формулы Excel и операторы ЕСЛИ?

Это формула Excel с вложенными операторами ЕСЛИ:

=IF((B2="East"),4,IF((B2="West"),3,IF((B2="North"),2,IF((B2="South"),1,""))))

Чтобы по существу выполнить это:

If cell B2 = "East"
   return "4"

ElseIf cell B2 = "West"
   return "3"

ElseIf cell B2 = "North"
   return "2"

ElseIf cell B2 = "South"
   return "1"

Else
   return ""

Могут ли формулы Excel быть написаны таким «более читабельным» образом и преобразованы в официальный синтаксис? Есть ли инструмент, помогающий писать формулы Excel?

Это может быть вопрос "суперпользователя"... но только программисты могут знать ответ!


person Robin Rodricks    schedule 12.10.2009    source источник


Ответы (5)


Надстройка Excel Formula Formatter от Роба ван Гелдер, упомянутый в Daily Dose of Excel.

Строка формул Excel игнорирует переводы строк и пробелы, поэтому вы можете использовать клавиши Alt+Enter и пробел для форматирования формул по своему усмотрению. Я пробовал и быстро перестал это делать. Слишком много пробелов, особенно если нужно отредактировать.

person Dick Kusleika    schedule 12.10.2009

Одним из вариантов может быть использование VBA для создания определяемой пользователем функции.

Вы бы добавили новый модуль в рабочую книгу, а затем вставили какой-то VB, который выглядел бы примерно так:

Function DirectionAsInt(Direction)
    Select Case (Direction):
        Case "East":
            DirectionAsInt = 4
        Case "West":
            DirectionAsInt = 3
        Case "North":
            DirectionAsInt = 2
        Case "South":
            DirectionAsInt = 1
    End Select
End Function

Затем в свою ячейку вы можете поместить:

=DirectionAsInt(B2)
person Dave Webb    schedule 12.10.2009
comment
Хороший временной интервал, хотя на самом деле он не отвечает на мой вопрос. - person Robin Rodricks; 12.10.2009

Есть ли инструмент, помогающий писать формулы Excel?

Боюсь, что нет.

В приведенном конкретном примере я был бы склонен сделать следующее:

  1. Создайте новое имя, назовите его как CompassPoints и установите для него значение ={"South";"North";"West";"East"}.
  2. Теперь ваша формула становится =MATCH(CompassPoints, B2, 0)
person Mike Woodhouse    schedule 12.10.2009

Предполагая, что у вас нет таблицы поиска, вы можете выполнить сопоставление индекса с массивом.

В функции индекса вы создаете массив с нужными вам значениями. Затем вместо того, чтобы вводить конкретную строку в качестве следующего аргумента функции, вы добавляете функцию сопоставления.

В функции Match вы указываете значение, которое хотите найти (в данном случае мы хотим найти значение в ячейке B2), а затем массив, в котором вы хотите выполнить поиск. Затем мы используем нулевой аргумент, чтобы указать оператору match использовать точное соответствие.

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

=INDEX({2,1,4,3},MATCH(B2,{"North","South","East","West"},0))

person Gary Henning    schedule 03.11.2020

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

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

person Dolphin    schedule 12.10.2009
comment
Я второй таблицу поиска. Создайте таблицу, затем используйте vlookup. Легче отлаживать. - person guitarthrower; 12.10.2009
comment
Дело не в поиске NSEW, а в формулах Excel в целом и инструментах разработки для них. - person Robin Rodricks; 12.10.2009
comment
Моя точка зрения заключалась в том, что часто можно, немного подумав, превратить кажущуюся сложной формулу в простую. - person Mike Woodhouse; 13.10.2009