2

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

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

Списки проверки данных позволяют вам создать определенную структуру данных в вашей книге. Они больше предназначены для взаимодействия с пользователем. Если вы хотите, чтобы пользователь рабочей книги вставлял только набор заданных данных, например, пончики, пирожные, кексы и блинчики, вы можете создать список с использованием именованного диапазона, например, "Закуски", или создать таблицу и назвать свою таблицу "Закусками". Где данное имя является одним словом (т.е. в данном имени нет пробелов)

Недостатком использования списков является то, что если бы нам пришлось добавить в список еще одну закуску под названием «Круассаны», то нам нужно было бы переопределить изначально созданные списки. Таблицы обходят эту неэффективность в том смысле, что вы можете легко добавить новую строку в таблицу, добавив ее из последней строки или записав следующую строку после текущей строки таблицы и нажав Enter.

Теперь для проверки данных, я рекомендую посетить ссылку ниже для подробного ознакомления, так как объяснение делает этот вопрос слишком длинным. http://analyticsdemystified.com/excel-tips/excel-dropdowns-done-right/

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

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

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

Списки данных в виде таблиц

Теперь вопрос заключается в том, как мне реализовать смежную ячейку, например, если ячейка C13 имеет список проверки для таблицы закусок, как сделать ячейку D13 списком проверки, основанным на выбранном пользователем входе C13 (т. Е. Если C13 выбран в качестве Пончиков, то возможным выбором списка проверки D13 будут данные столбца таблицы Donuts).

Пожалуйста, важно отметить, что исходный список проверки в C13 был бы создан с использованием функции INDIRECT, так как это таблица, а не именованный диапазон.

2 ответа2

2

Простой способ в 4 простых шага

Шаг 1 Создайте свои таблицы:

Шаг 2 Назовите ваши таблицы: выберите таблицы и переименуйте их, чтобы они соответствовали значению в первичной таблице Table1, например. Таблица2 с заголовком "Cakes" должна называться Cake, так как это значение в основной таблице Table1.
Но как? Нажмите на угол таблицы, чтобы выбрать ее, введите новую метку, где написано « Таблица2» или аналогичную, и нажмите "Ввод". Не беспокойтесь, если он по-прежнему говорит "Table2" и т.д.
(Примечание! Это не обязательно для первичной таблицы, например. Таблица 1.)

Шаг 3 Выберите, где вы хотите свой первый список, перейдите на вкладку данных и в проверку данных. Выберите "list" и введите: =INDIRECT("Table1") в окне источника:

Шаг 4 Выберите ячейку для второго списка, которая будет зависеть от первого списка. Вернитесь к проверке данных, выберите "list" и введите =INDIRECT(K2) где "K2" - местоположение первого списка.

СДЕЛАННЫЙ

Для третьего списка, зависящего от второго списка, повторите шаг 4 и вместо этого обратитесь ко второму списку. Удачи!

0

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

Шаг 1: Код VBA

Вам понадобятся три вещи:

  1. Модуль Array Chip Pearson - фактический код VBA ближе к концу.

  2. Модуль сортировки чипа Пирсона - актуальный код VBA также ближе к концу.

  3. Мой ужасно организованный макрос

Чтобы вставить их в модули VBA в своей книге, нажмите Alt+F11, найдите свой проект в Project Explorer, щелкните правой кнопкой мыши папку "Модули" и выберите "Вставить модуль". Вставьте код из каждой из 3 ссылок выше в отдельные модули.

Находясь в редакторе VBA, откройте диалоговое окно «Ссылки» (Alt+T, затем « Ввод») и установите флажок «Среда выполнения сценариев Microsoft».

Шаг 2: Структурирование ваших данных

Теперь вам не нужен лист с вашими данными (называемый, скажем, «Данные»), как если бы это была хорошо структурированная база данных. Вот как я это сделаю:

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

Шаг 3: Основной лист

Давайте перейдем к таблице данных и настроим следующую структуру:

Выберите ячейку C2 и назовите ее Snack.Selected Чтобы назвать ячейку, выберите ее и нажмите Alt M M D, затем введите имя в появившемся диалоговом окне, как показано на рисунке. Пока что введите значение, например, «Cake», чтобы следующий шаг имел больше смысла.

Идите вперед и также назовите ячейку C3 'Тип.Выбрано`, но оставьте пока пустым.

Шаг 4: Извлечение значений из нашей таблицы в техпаспорте

Перейдите на свой лист проверки и настройте следующую структуру:

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

=MultiLookup("Data","Snack",TRUE,TRUE)

Вместо нажатия Enter нажмите Ctrl+Shift+Enter, потому что это формула массива

Если это работает так, как рекламируется, вы должны увидеть список ваших закусок, за которыми следуют некоторые ошибки # N/A. Ошибки ожидаются - они просто означают, что у вас меньше закусок, чем вы ожидали, исходя из размера B3:B20 .

Объясняя параметры в формуле:

  1. Лист, где находятся данные ("Данные")
  2. Поле, которое вы хотите из этого листа ("Закуска")
  3. Удалить дубликаты (т.е. сгруппированные)? (ПРАВДА)
  4. Отсортировано по алфавиту? (ПРАВДА)

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

=MultiLookup("Data","Type",TRUE,TRUE,"Snack",Snack.Selected)

Здесь должны отображаться доступные типы тортов. Какое значение вы ввели на главном листе на предыдущем шаге, помните?

Это работает путем добавления двух аргументов в формулу:

  1. Поле для фильтрации ("Закуска")
  2. Выберите только значения, равные (Закуска.Выбранные)

Поэтому, когда вы изменяете свои данные в Main, столбец Types обновляется автоматически!

Шаг 5: Завершение проверки

Чтобы подвести итоги, давайте закончим нашу проверку данных, создав Snack.Choices и Type.Choices имени. Пожалуйста, назовите ячейки B1 и C1 в проверке соответственно. Вы также можете просто набрать на этом маленьком поле, чтобы назвать ячейку:

В ячейку B1 необходимо поместить следующую формулу:

="Validation!"&CELL("address",B3)&":"&CELL("address",OFFSET(B$2,COUNTIF(B3:B50,"*"),0))

Что это делает, это создать текстовую ссылку на проверку!$ B $ 3:$ B $ 6, где находятся ваши закуски. Скопируйте эту формулу вправо, и все готово!

Вернитесь на свой главный лист и давайте обратимся к этим ячейкам в правилах проверки для Snack и Type.

Выберите ячейку C2 и kbd> Alt A V V, чтобы создать проверку данных. Выберите «List» и установите для источника значение =INDIRECT(Snack.Choices) . Обратите внимание, что вокруг Snack.Choices

Сделайте то же самое для ячейки C3 но установите источник =INDIRECT(Type.Choices) .

Мы используем INDIRECT() потому что значения Snack.Choices и Type.Choices - это косвенные (то есть текстовые) ссылки на диапазоны в нашей рабочей книге.

Теперь поэкспериментируйте с параметрами проверки, чтобы увидеть все в действии.

Дайте знать, если у вас появятся вопросы!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .