Эквивалент функции Case в Excel

у меня интересная задача - мне нужно проверить следующие данные в Excel:

|   A  -   B  -   C  -  D   |
|------|------|------|------|
|  36  |   0  |   0  |   x  |
|   0  |  600 |  700 |   x  |
|___________________________|

вы должны извинить мое удивительно плохое искусство ASCII. Поэтому мне нужен столбец D (x) для проверки соседних ячеек, а затем при необходимости преобразовать значения. Вот критерии:

если столбец B больше 0, все работает отлично, и я могу получить кофе. Если он не соответствует этому требованию, то мне нужно преобразовать A1 в соответствии с таблицей-для пример,32 = 1420 и в D. К сожалению, нет никакой связи между A и тем, что ему нужно преобразовать, поэтому о создании вычисления не может быть и речи.

оператор case или switch был бы идеальным в этом сценарии, но я не думаю, что это собственная функция в Excel. Я также думаю, что было бы безумно цеплять кучу =IF() заявления вместе, которые я сделал около четырех раз, прежде чем решил, что это плохая идея (история моей жизни).

9 ответов


звучит как работа для VLOOKUP!

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


без ссылки на исходную проблему (которая, как я подозреваю, давно решена), я совсем недавно обнаружил аккуратный трюк, который заставляет функцию выбора работать точно так же, как select case оператор без необходимости изменять данные. Есть только одна загвоздка: только одно из ваших условий выбора может быть истинным в любой момент времени.

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

CHOOSE( 
    (1 * (CONDITION_1)) + (2 * (CONDITION_2)) + ... + (N * (CONDITION_N)),
    RESULT_1, RESULT_2, ... , RESULT_N
)

в предположении, что только одно из условий от 1 до N будет истинным, все остальное равно 0, что означает числовое значение будет соответствовать соответствующему результату.

если вы не на 100% уверен, что все условия являются взаимоисключающими, вы можете предпочесть что-то вроде:

CHOOSE(
    (1 * TEST1) + (2 * TEST2) + (4 * TEST3) + (8 * TEST4) ... (2^N * TESTN)
    OUT1, OUT2, , OUT3, , , , OUT4 , , <LOTS OF COMMAS> , OUT5
)

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

изменить: За комментарий ниже от @aTrusty: Глупые числа запятых можно устранить (и в результате оператор choose будет работать до 254 случаев), используя формулу следующей формы:

CHOOSE(
    1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2), 
    OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4
)

обратите внимание на второй аргумент LOG предложение, которое помещает его в базу 2 и заставляет все это работать.

Edit: Per Дэвид, теперь есть фактический оператор коммутатора, если вам посчастливилось работать в office 2016. Помимо трудностей в чтение, это также означает, что вы получаете эффективность переключателя, а не только поведение!


функция Switch теперь доступна в Excel 2016 / Office 365

Переключатель (выражение, value1, result1, [по умолчанию или value2, result2],...[по умолчанию или value3, result3])

example:
=SWITCH(A1,0,"FALSE",-1,"TRUE","Maybe")

Поддержка Microsoft-Office


попробуй это:

=IF(B1>=0, B1, OFFSET($X, MATCH(B1, $X:$X, Z) - 1, Y)

здесь
X = столбцы, которые вы индексируете в
Y = количество столбцов слева (- Y) или справа (Y) индексированного столбца, чтобы получить значение, которое вы ищете
Z = 0, если точное совпадение (если вы хотите обрабатывать ошибки)


Я знаю, что немного поздно отвечать, но я думаю, что это короткое видео поможет вам много.

http://www.xlninja.com/2012/07/25/excel-choose-function-explained/

по существу, он использует функцию choose. Он очень хорошо объясняет это в видео, поэтому я позволю сделать это вместо того, чтобы печатать 20 страниц.

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

http://www.xlninja.com/2012/08/13/excel-data-validation-using-dependent-lists/

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


Я понимаю, что это ответ на старый пост-

мне нравится функция If () в сочетании с Index ()/Match ():

=IF(B2>0,"x",INDEX($H:$I,MATCH(A2,$H:$H,0),2))

функция if сравнивает то, что находится в столбце b, и если она больше 0, она возвращает x, если нет, она использует массив (таблицу информации), идентифицированный функцией Index() и выбранный Match (), чтобы вернуть значение, которому соответствует a.

массив индексов имеет абсолютное расположение$H:$I (знак доллара) так что место, на которое он указывает, не изменится при копировании формулы. Строка со значением, которое вы хотите вернуть, определяется функцией Match (). Match () имеет дополнительное значение, не нуждаясь в отсортированном списке, чтобы просмотреть, что требует Vlookup (). Match () может найти значение со значением: 1 меньше, 0 точно, -1 больше. Я поставил ноль после абсолютного массива Match ()$H:$H найти точное совпадение. Для столбца значение массива Index (), которое нужно вернуть, является введенный. Я ввел 2, потому что в моем массиве возвращаемое значение было во втором столбце. Ниже моего массива индексов выглядело так:

32   1420

36   1650

40   1790

44   1860

55   2010

значение в столбце для поиска в списке в первом столбце В моем примере и соответствующее значение, которое будет возвращать права. Таблица look up / reference может быть на любой вкладке рабочей книги или даже в другом файле. - Book2-это имя файла, а Sheet2-это имя "другой вкладки".

=IF(B2>0,"x",INDEX([Book2]Sheet2!$A:$B,MATCH(A2,[Book2]Sheet2!$A:$A,0),2))

если у вас не хочу, чтобы X возвращался, когда значение b больше нуля, удалите x для "пустого" /нулевого эквивалента или, возможно, поместите 0 - не уверен, что вы хотите там.

ниже начинается функция с X удален.

=IF(B2>0,"",INDEX...

я использовал это решение для преобразования однобуквенных цветовых кодов в их описания:

=CHOOSE(FIND(H5,"GYR"),"Good","OK","Bad")

вы в основном ищете элемент, который вы пытаетесь декодировать в массиве, а затем используете CHOOSE() для выбора связанного элемента. Это немного компактнее, чем создание таблицы для VLOOKUP().


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

http://fiveminutelessons.com/learn-microsoft-excel/using-multiple-if-statements-excel

это элегантно, потому что он использует только функцию IF. В принципе, это сводится к следующему:

Если(условие, выберите / используйте значение из таблицы, если(условие, выбрать/использовать другое значение из таблицы...

и так далее

работает красиво, даже лучше, чем HLOOKUP или VLOOOKUP

но... Будьте осторожны - существует ограничение на количество вложенных операторов if в Excel может обрабатывать.


если у вас нет оператора SWITCH в Вашей версии Excel (pre-Excel-2016), вот реализация VBA для него:

Public Function SWITCH(ParamArray args() As Variant) As Variant
    Dim i As Integer
    Dim val As Variant
    Dim tmp As Variant

    If ((UBound(args) - LBound(args)) = 0) Or (((UBound(args) - LBound(args)) Mod 2 = 0)) Then
        Error 450       'Invalid arguments
    Else
        val = args(LBound(args))
        i = LBound(args) + 1
        tmp = args(UBound(args))

        While (i < UBound(args))
            If val = args(i) Then
                tmp = args(i + 1)
            End If
            i = i + 2
        Wend
    End If

    SWITCH = tmp
End Function

Он работает так же, как и ожидалось, падени-в замене, например, для электронных таблиц от Google .

синтаксис:

=SWITCH(selector; [keyN; valueN;] ...  defaultvalue)

здесь

  • селектор-это любое выражение, которое сравнивается с ключами
  • key1, key2, ... это выражения, которые сравниваются с селектор
  • value1, value2,... значения, которые выбираются, если селектор равен соответствующему ключу (только)
  • defaultvalue используется, если ключ не соответствует селектору

примеры:

=SWITCH("a";"?")                       returns "?"
=SWITCH("a";"a";"1";"?")               returns "1"
=SWITCH("x";"a";"1";"?")               returns "?"
=SWITCH("b";"a";"1";"b";TRUE;"?")      returns TRUE
=SWITCH(7;7;1;7;2;0)                   returns 2
=SWITCH("a";"a";"1")                   returns #VALUE!

чтобы использовать его, откройте Excel, перейдите на вкладку инструменты разработки, нажмите Visual Basic, щелкните правой кнопкой мыши на ThisWorkbook, выберите Вставить, затем модуль, наконец, скопируйте код в Редактор. Вы должны сохранить как макро-дружественную книгу Excel (файл xlsm).