Подтвердить что ты не робот

Функция случая, эквивалентная в 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(), которые я сделал около четырех раз, прежде чем решить, что это плохая идея (история моей жизни).

4b9b3361

Ответ 1

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

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

Ответ 2

Без ссылки на исходную проблему (которая, как я подозреваю, уже давно решена), я совсем недавно обнаружил хитрый трюк, который заставляет функцию выбора работать точно так же, как оператор 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: глупые числа запятых могут быть исключены (и в результате оператор выбора будет работать до 254 случаев) с помощью формулы следующей формы:

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

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

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

Ответ 3

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

<суб >   SWITCH (выражение, value1, result1, [default или value2, result2],... [default или value3, result3])

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

суб >

Поддержка Microsoft-поддержки

Ответ 4

Попробуйте это;

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

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

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

Ответ 7

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

Мне нравится функция If(), объединенная с Index()/Match():

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

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

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

32   1420

36   1650

40   1790

44   1860

55   2010

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

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

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

Ниже приводится начало функции с удаленным x.

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

Ответ 8

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

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

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

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

И так далее

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

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

Ответ 9

Если у вас нет оператора SWITCH в вашей версии Excel (до 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

Он работает точно так же, как и ожидалось, заменой, например, для функции SWITCH Google Spreadsheet.

Синтаксис:

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

где

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

Примеры:

=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).

Ответ 10

Microsoft заменяет SWITCH, IFS и IFVALUES только функцией CHOOSE.

=CHOOSE($L$1,"index_1","Index_2","Index_3")