Создание списка уникальных предметов в выпадающем списке - PullRequest
1 голос
/ 14 апреля 2020

Я попытался найти решение проблемы, с которой столкнулся, и, решив ее, я хотел бы опубликовать ее, чтобы она могла помочь другим. Любой другой метод создания списка уникальных элементов из именованного диапазона или таблицы включал Power Query, которые не были очень динамичными c, Сводные таблицы, которые имеют свои собственные ловушки, или VBA, которые несут ограничения разрешений при отправке другим.

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

Сначала я создал таблицу из 3 столбцов с именем MY_Table (имя должно быть названо для этих формул для динамической работы), которая имеет три заголовка ORIGINS , FIRST_INST и INST_SORTED

В теле таблицы просто заполните столбец ORIGINS данными требуется вот так (обратите внимание, что числа в First_Inst начинаются с 4 для 'Engli sh' в этом примере, поскольку заголовки таблиц были в 3-й строке рабочего листа):

Table Setup

Столбец FIRST_INST затем заполняется следующей формулой, которая определяет, где в таблице первый экземпляр каждого происходит запись:

= IF (SUM (MIN (ROW (MY_TABLE))) - 1) + MATCH ([@ ORIGINS], INDIRECT ("$" & SUBSTITUTE (ADDRESS (1, (MIN (COLUMN (MY_TABLE)) ) + MATCH (my_table [[# Заголовки], [ИСТОКИ]], [my_table #headers], 0) -1), 4), "1", "") и MIN (СТРОКА (my_table)) & ": $" & ПОДСТАВИТЬ (АДРЕС (1, (МИН (колонка (my_table)) + MATCH (my_table [[# Заголовки], [ИСТОКИ]], [my_table #headers], 0) -1), 4), "1", "" ) & ROW ()), 0) = ROW (), ROW (), 0)

Столбец INST_SORTED имеет следующую формулу, которая заполняет этот столбец с помощью целых чисел в FIRST_INST по порядку:

= IF (LARGE ([FIRST_INST], SUM (MIN (ROW () - ROW (MY_TABLE) +1))))> 0, INDIRECT ("$" & SUBSTITUTE (ADDRESS) (1, (МИН (колонка (my_table)) + MATCH (my_table [[# Заголовки], [ИСТОКИ]], [my_table #headers], 0) -1), 4), "1", "") и большой ( [FIRST_INST], SUM (MIN (ROW () - ROW (MY_TABLE) +1)))), "")

Тогда, поскольку мы не можем вставить это непосредственно в источник проверки данных, мы имеем где-то ячейка - не имеет значения где - которая имеет следующую формулу, которая указывает, какой диапазон ячеек имеет уникальные элементы в пределах INST_SORTED

= ЗАМЕНА (АДРЕС (1, COLUMN (MY_TABLE) + MATCH (MY_TABLE [[# Headers], [INST_SORTED]], MY_TABLE [#Headers], 0) -1,4), "1", "") и MIN (СТРОКА (my_table)) & ":" & ПОДСТАВИТЬ (АДРЕС (1, колонка (my_table) + MATCH (my_table [[# Заголовки], [INST_SORTED]], my_table [#headers], 0) -1,4), "1", "") и СУММ (MIN (СТРОКА (my_table)) + SUM (СЧЕТЗ (my_table [INST_SORTED]) - СЧИТАТЬПУСТОТЫ (my_table [INST_SORTED]) - 1) )

Наконец, мы создаем проверку данных в раскрывающемся списке и используем указанную выше ячейку в качестве своего косвенного источника - т. Е. Источником будет = INDIRECT (your_cell_here)

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

В основном это техника, которую я использую, и я знаю, что у 365 есть несколько новых команд для борьбы с этим ограничением. Тем не менее, для нас, пользователей Deisel с поддержкой Excel (я нахожусь в 2003 году), я надеюсь, что это в какой-то степени полезно.

...