Отображать описания на элементах, только если это применимо - как это сделать без нескольких вложенных функций IF в Excel? - PullRequest
1 голос
/ 04 июня 2019

У меня есть сценарий, в котором я хочу, чтобы ячейка отображала определенную информацию в зависимости от другого набора «триггерных» ячеек.Это немного проще, если есть только две «триггерные ячейки», то есть:

*Trigger Cells:

Display description 1? (C1)   Yes
Display description 2? (C2)   No


Display Cell (A1) Formula = 
IF(AND(C1 = "Yes", C2 = "Yes), "Description 1" & "Description 2", IF(C1 = "Yes", "Description 1", IF(C2 = "Yes", "Description 2", "N/A"))))

Это делается путем просмотра всех различных комбинаций: оба триггера - «да»;только триггер 1 - «да»;только триггер 2 - «да»;(с «значением, если ложно», составляющим «оба триггера - комбинация« нет »)

Проблема в том, что у меня более 2 ячеек триггера, скажем, 6 или более (с числом описания = числотриггерные ячейки). Помимо создания сложного оператора IF, который охватывает ВСЕ различные комбинации «Да / Нет», есть ли способ легко сделать это?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 04 июня 2019

Вы можете использовать CONCAT (или CONCATENATE для более старых версий Excel), с одним IF после другого:

=CONCAT(IF(C1="Yes","Description 1,",""), IF(C2="Yes","Description 2,",""))

Это может добавить дополнительные запятые, но я оставлю вас, чтобы решить, как убрать это.

Чтобы добавить «N / A» в случае отсутствия «Да», вы можете заключить эту формулу в еще один IF:

=IF(COUNTIFS(C1:C2,"Yes")=0,"N/A",
    CONCAT(IF(C1="Yes","Description 1,",""), IF(C2="Yes","Description 2,",""))
)

РЕДАКТИРОВАТЬ: БОЛЬШЕ КОМПЛЕКСНОЕ РЕШЕНИЕ

Если у вас несколько триггеров, может быть лучше создать таблицу поиска всех возможных результатов, а затем найти ее с помощью кода:

* +1012 *enter image description here

Преобразование да / нет в серию единиц и нулей (двоичные коды).

Затем просто найдите код, используя INDEX MATCH.

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

1 голос
/ 04 июня 2019

Хотя я всегда предпочитаю решения, отличные от VBA, в этом случае эмуляция собственной объединенной функции IF (чтобы мы могли проверять критерии) является хорошей заменой формулы TEXTJOIN().

Так взято из здесь например:

Function ConcatenateIf(CriteriaRange As Range, Condition As Variant, _
        ConcatenateRange As Range, Optional Separator As String = ",") As Variant
    Dim i As Long
    Dim strResult As String
    On Error GoTo ErrHandler
    If CriteriaRange.Count <> ConcatenateRange.Count Then
        ConcatenateIf = CVErr(xlErrRef)
        Exit Function
    End If
    For i = 1 To CriteriaRange.Count
        If CriteriaRange.Cells(i).Value = Condition Then
            strResult = strResult & Separator & ConcatenateRange.Cells(i).Value
        End If
    Next i
    If strResult <> "" Then
        strResult = Mid(strResult, Len(Separator) + 1)
    End If
    ConcatenateIf = strResult
    Exit Function
ErrHandler:
    ConcatenateIf = CVErr(xlErrValue)
End Function

Назовите это как:

=ConcatenateIf(C1:C6,"yes",B1:B6)

Результат:

enter image description here

Существует даже UDF ConcatenateIfs для нескольких условий.

EDIT:

Для дальнейшего использования, если у людей есть соответствующий Excel, использование TEXTJOIN() может позаботиться об этом следующим образом:

{=TEXTJOIN(", ",TRUE,IF(C1:C6="yes",B1:B6,""))}
1 голос
/ 04 июня 2019

Вы можете использовать CHOOSE здесь, что также позволяет вам расширить до дополнительных опций описания:

C1 | C2 | Output
 N |  N | N/A
 Y |  N | Desc1
 N |  Y | Desc2
 Y |  Y | Desc1 & Desc2

Теперь, если мы объединим это в двоичные биты, тогда мы можем иметь C1=Yes как00 или 01 (0 или 1 в десятичном формате) и C2=Yes как 00 или 10 (0 или 2 в десятичном формате), и сложите их вместе:

C1 | C2 | Output
 N |  N | 0 + 0 = 0
 Y |  N | 1 + 0 = 1
 N |  Y | 0 + 2 = 2
 Y |  Y | 1 + 2 = 3

Затем добавьте 1, потому что CHOOSE равно 1Индексированный:

=CHOOSE(1 + (C1="Yes") + 2*(C2 = "Yes"), "N/A", "Description 1", "Description 2", "Description 1" & "Description 2")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...