Выпадающий список с условным оператором

#excel #excel-formula #drop-down-menu #excel-indirect #excel-tables

Вопрос:

У меня есть некоторые материалы в столбце B, некоторые из них находятся в определении таблицы под названием Material_List. В D49 я пытаюсь написать условный оператор таким образом, чтобы, если данные в B49 уже существуют в определении таблицы, затем напечатать имя заголовка или другое КОСВЕННОЕ($49). C49 имеет независимый выпадающий список, а D49 будет зависимым.

В D49 я использовал следующую формулу в данных—>Проверка данных—>>Источник=

 =IF(MAX((ISNUMBER(MATCH(Material_List;$B49;0))*COLUMN(Material_List)))=0;
INDIRECT($C49);
INDEX(Material_List[#Headers];1;MAX((ISNUMBER(MATCH(Material_List;$B49;0))*
COLUMN(Material_List))))))
 

с помощью списка Разрешить=. Но там написано Ошибка «Есть проблема с этой формулой».

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

 =IF(MAX((ISNUMBER(MATCH(Material_List;$B50;0))*COLUMN(Material_List)))=0;
INDIRECT($C50);
INDEX(Material_List[#Headers];1;MAX((ISNUMBER(MATCH(Material_List;$B50;0))*
COLUMN(Material_List))))))
 

Я пытаюсь создать выпадающий список на основе указанных критериев. кто-нибудь может, пожалуйста, сказать, что не так с моей формулой?
Таблица данных

Комментарии:

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

2. Как вы можете видеть на изображении, ячейки D50 и D51 идентифицированы как алюминиевые по формуле. это связано с тем, что Alu, алюминий в B50 и B51 относятся к списку таблиц с одним из алюминиевых заголовков. Если ALMG3 в B49 недоступен ни в одном из списков таблиц, я хотел бы активировать выпадающий список на основе C49.

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

4. Если материал есть в списке, то мне не нужно ничего делать с ячейкой. Так что не имеет никакого значения, есть ли у меня выпадающий список или нет. Мое намерение состоит в том, что, если материал не найден, я должен передать эту информацию о материале вручную из выпадающего списка. Если материала нет в списке, я хотел бы заполнить все классы материалов. Таким образом, для категории C49 Metalle в D49 есть зависимый выпадающий список с вариантами Алюминий, Сталь, Медь и т.д..

5. А, хорошо. Теперь я понимаю. Таким образом, вы хотите, чтобы параметры второго выпадающего списка варьировались в зависимости от выбора в первом. Хитрый… У меня будет спектакль.

Ответ №1:

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

Не спрашивай меня, почему. Я думаю, что это просто выдающаяся ошибка Excel, которая еще не исправлена. Пожалуйста, смотрите эту ссылку для получения дополнительной информации: https://exceloffthegrid.com/using-an-excel-table-within-a-data-validation-list/

Лучший способ, который я нашел, чтобы обойти это, — создать именованный диапазон, который ссылается на нужные вам ссылки на таблицы («Список материалов» и «Список материалов[#Заголовки]» в вашем случае). Затем вы можете использовать эти именованные диапазоны при проверке данных вместо прямых ссылок на таблицы.

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

 MATCH(Material_List;$B50;0)
 

Обычно a MATCH будет в формате:

 MATCH(<single value to look for>, <range to look in>, 0)
 

Похоже, у вас это перевернуто, что означает, что он всегда должен возвращать #VALUE! ошибку.

Кроме того, я не думаю, что вы можете использовать сопоставление в 2D-массиве, поэтому, если ваша таблица «Список материалов» состоит более чем из одного столбца, это также приведет к возвращению #VALUE! ошибки.

Обновить:

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

введите описание изображения здесь

Затем я бы создал 3 именованных диапазона. Один для диапазона тела таблицы, называемый «MaterialList_TblRange».:

 =Material_List
 

Один для диапазона заголовков таблицы, называемый «MaterialList_TblHeaderRange».:

 =Material_List[#Headers]
 

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

 =INDEX(MaterialList_TblRange,1,MATCH(Sheet1!$B23,MaterialList_TblHeaderRange,0)):INDEX(MaterialList_TblRange,COUNTA(INDEX(MaterialList_TblRange,1,MATCH(Sheet1!$B23,MaterialList_TblHeaderRange,0)):INDEX(MaterialList_TblRange,ROWS(MaterialList_TblRange),MATCH(Sheet1!$B23,MaterialList_TblHeaderRange,0))),MATCH(Sheet1!$B23,MaterialList_TblHeaderRange,0))
 

Я сейчас объясню, что это значит.

Последний шаг-настроить проверку данных там, где мы хотим, чтобы наши списки.

Там, где мы хотим, чтобы появлялись основные списки, мы можем просто ввести:

 =MaterialList_TblHeaderRange
 

И проверка раскрывающегося списка ответчика может быть введена как:

 =DropDownOptions
 

Это и есть результат:

введите описание изображения здесь
введите описание изображения здесь

Теперь вернемся к длинной формуле диапазона с именем «Выпадающие варианты»…

В основном мы используем INDEX:INDEX для выбора первой/последней ячейки в диапазоне, который мы хотим использовать в раскрывающемся списке «Выход».

Первый INDEX :

 =INDEX(MaterialList_TblRange,1,MATCH(Sheet1!$B23,MaterialList_TblHeaderRange,0))
 

Просто выберите первую ячейку из столбца, заголовок которого соответствует выбору в нашем первом раскрывающемся списке.

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

Это означает, что в этой таблице не должно быть пробелов, иначе в конце может быть пропущен какой-либо вариант.

Я надеюсь, что в этом есть смысл.

Комментарии:

1. большое вам спасибо за такое пространное объяснение с примером. Все, что вы имели в виду, имеет для меня смысл, но о чем говорится в формуле $B23? У меня есть некоторые проблемы с пониманием этого =ИНДЕКС(MaterialList_TblRange,1,СООТВЕТСТВУЕТ(Лист1!$B23,MaterialList_TblHeaderRange,0))

2. $B23 будет ссылкой на ваш первый основной выпадающий список. На самом деле я ввел его как $B3, но он автоматически меняется для каждой строки. Так что каждый из них относится к другому главному раскрывающемуся списку.