Как сделать вложенную формулу if и ISBLANK и отобразить текст, если он не пустой - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь понять, как сделать вложенную формулу IF и ISBLANK для отображения текста, если он не пустой.

Пока у меня есть это:

=If(Not(ISBLANK(SCB!A8)),”X”,If(Not(ISBLANK(Voda!A8),”Y”,If(Not(ISBLANK(Fixnetix!A8),”A”,If(Not(ISBLANK(IOW!A8),”B”,”No open cases")

Это не сработало, и я пытаюсь получить данные из 4 других рабочих книг, которые будут постоянно меняться.

Моя теория:

  • Если Xимеет данные, затем отображается, но если X не имеет данных, переместится в Y

  • Если Y имеет данные, то отобразится, но если Y не имеет данных, переместится в A

  • Если у A есть данные, то дисплей, но если у A нет данных, переместиться в B

  • Если у B есть данные, то отобразить, но если у B нет данных,затем отобразите «Нет открытых дел»

Это переменные, которые у меня есть

  • (SCB! A8)
  • (Voda! A8)
  • (Fixnetix! A8)
  • (IOW! A8)
  • "Нет открытых дел"

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

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

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

Следующая функция будет делать то, что вам нужно:

Function FirstMatch(DefaultVal As String, ParamArray Params() As Variant) As String
    Application.Volatile (True)
    Dim i As Integer
    FirstMatch = DefaultVal
    For i = LBound(Params) To UBound(Params) Step 2
        If Range(Params(i)).Value <> "" Then
            FirstMatch = Params(i + 1)
            Exit For
        End If
    Next
End Function

Как только вы поместите эту функцию в свой лист, формула для ее вызова станет намного проще:

=FirstMatch("No open cases", "SCB!A8", "X", "Voda!A8", "Y", "Fixnetix!A8", "A", "IOW!A8", "B")

Он работает просто, устанавливая возвращаемое значение по умолчанию, а затем обрабатывает каждую пару строк по очереди. Если первая из пары не пуста, она установит возвращаемое значение на второе и вернет. В противном случае он будет продолжать идти, пока не найдет совпадение или не исчерпает возможности.

Если в нет исчерпания возможностей, возвращается возвращаемое значение по умолчанию.


Имейте в виду, что существует множество возможностей улучшить этот код, например сделать обнаружение пробелов более интеллектуальным (с учетом любого пустого пространства вместо того, чтобы требовать полностью пустую ячейку) или вызвать какую-то явную ошибку, если счетчик аргументов неверно (зависшая ячейка без соответствующего значения для использования), но показанный код должен быть хорошим началом.

0 голосов
/ 16 сентября 2018

В вашей попытке есть несколько синтаксических проблем.

Вот что, я думаю, это исправит:

=IF(NOT(ISBLANK(SCB!A8)),”X”,IF(NOT(ISBLANK(Voda!A8)),"A",IF(NOT(ISBLANK(Fixnetix!A8)),"Y",IF(NOT(ISBLANK(IOW!A8)),"B","No OpenCases"))))

В основном вы пропустили несколько скобок, а также заключительную цитату.В частности, в некоторых ваших внутренних NOT(ISBLANK()) комбинациях отсутствовала вторая заключительная кавычка.

...