2015-01-14 2 views
3

У меня есть следующий пример списка:проверки данных без имени диапазонов

list

Примечание: В моем реальном списке у меня есть около 200 вариантов и 400 подопций

И я хотел бы иметь 2 dropdownlists для выбора любой опции и ее подписок:

Для опций я использовал проверку данных - список с диапазоном = $ A $ 8: $ A $ 12

options

И подопции я попробовал следующее:

Именованных диапазоны

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

Пример

Named Range:  _ABC05 
Refers To:  =Sheet1!$D$9:$D$10 
Data validation: = INDIRECT(CONCATENATE("_";SUBSTITUTE(A2;"-";""))) 

enter image description here

Опять же, это работает, но я стараюсь избегать, чтобы сохранить 200 именованных диапазонов.

Любое решение без использования названных диапазонов или vba?

ответ

2

Наконец я решить ее с помощью динамической проверки данных:

В скрытом колонке D, у меня есть следующая формула:

=CONCATENATE("D";MATCH(A2;$C$8:$C$15;0)+7;":D";MATCH(A2;$C$8:$C$15;1)+7) 

, и проверка данных, как это:

=INDIRECT(D2) 

enter image description here

Редактировать: Как упоминалось Aprillion, это будет работать, только если список опций будет отсортирован по алфавиту по возрастанию. В моем случае это всегда так, но было бы интересно узнать другое решение с несортированными данными. Кроме того, в этом примере можно избежать скрытого столбца и использовать = косвенный (concatenate ... в валидации данных, но в моем случае у меня есть списки в отдельном листе, и невозможно ссылаться на список проверки данных в внешними рабочими книгами или рабочими листами.

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

=IF(C2="";INDIRECT("$A$8:$A$12");INDIRECT("FakeList")) 
+1

вы пытались использовать '= косвенные (СЦЕПИТЬ (...))' без скрытых ячеек и я полагаю, вы ожидаете 1-го строка подпозиций будет сортироваться по алфавиту по возрастанию, это может быть явно указано в ответе :) – Aprillion

+0

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

+0

@SO Я читал об этом, но мне показалось, что это может помочь мне автоматически обновить список опций при добавлении новых параметров, но это не помогло отобразить субоптимы в выбранный параметр. –

Смежные вопросы