Microsoft Excel создает формулу поиска с динамическими заголовками заголовков - PullRequest
0 голосов
/ 16 мая 2018

Мне нужно создать формулу, в которой я могу искать разные номера политики по моим данным. Я хотел бы, чтобы заголовок моего заголовка динамически изменялся в зависимости от типа политики, которую я ищу. Допустим, у меня есть номер политики с типом A, я хотел бы только, чтобы заголовки из 5 столбцов из 12, хранящихся в моем наборе данных. Типу B понадобится 10 и т. Д. Я хочу, чтобы моя формула извлекала и показывала только заголовок заголовка в соответствии с типом политики, которую я ищу, чтобы пользователь не получил несколько пустых полей. Я буду искать только один номер политики в то время. Могу ли я сделать это без языка VBA? Как функция поиска индекса с поворотом?

1 Ответ

0 голосов
/ 16 мая 2018

«Мы можем решить любую проблему, введя дополнительный уровень косвенности». - присваивается Дэвид Дж. Уилер

Да, то, что вы описываете, можетбыть сделано с задними страницами или скрытыми строками (или столбцами) и формулами таблицы поиска.

Первое обращение: от номера политики к имени типа политики

Предположим, что номера вашей политики и связанные с ними типы приходятиз дампа базы данных или внутреннего веб-канала было бы удобнее вставить эти данные непосредственно на заднюю страницу, не редактируя и не форматируя их напрямую.См. https://support.office.com/en-us/article/Tutorial-Import-Data-into-Excel-and-Create-a-Data-Model-4b4e5ab4-60ee-465e-8195-09ebba060bf0 для руководства по заполнению таблицы данных Excel из базы данных по требованию.

=VLOOKUP($P$N,DT!$B:$D,3,FALSE)

Где

  • $P$N - абсолютссылка на ячейку, содержащую номер политики для поиска.
  • DT - это задняя страница с таблицами данных для поиска.
  • $B:$D - абсолютные столбцы данных.таблица, ваши столбцы будут различаться, но я рекомендую использовать абсолютные столбцы в формуле, чтобы число строк в таблице данных могло меняться со временем.Обратите внимание, что первый указанный столбец должен содержать номера политики;если ваши данные не организованы таким образом, вам придется добавить еще один уровень косвенности (например, другую заднюю страницу), который переформатирует таблицу необработанных данных в таблицу, которую можно использовать для поиска.
  • 3 - относительный столбец, считая от указанного первого столбца, который содержит информацию о связанном номере политики, которую вы хотите извлечь (т. е. столбец типа; ваш может отличаться).
  • FALSE указывает, что поискдолжен совпадать точно, что не является значением по умолчанию, и в противном случае вы получите непредсказуемые результаты.
  • Наконец, формула вернет #N/A, если совпадения нет.Вы можете оставить это в своей таблице или обернуть в функцию =IF(ISNA(VLOOKUP(... или =IFERROR(VLOOKUP(..., чтобы изменить выражение зависимых страниц.

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

Второе косвенное указание: от имени типа политики к ряду связанных данных заголовка

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

=COUNTA(C1:AA1)

Не думайте об этой страницет.е. нет строки заголовка или другого форматирования.Когда у вас есть все перечисленные типы, сортируйте свою заднюю страницу в столбцах B, Cell Values, упорядоченных по A to Z.Сортировка необходима для непротиворечивых результатов следующей формулы косвенного обращения.

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

=MATCH($T$N,TT!$B:$B,0)

Где

  • $T$N - это абсолютная ссылка на ячейку для имени типа политики.
  • TT - это имя электронной таблицы на задней странице, содержащей список типов и связанные с ними заголовки.
  • $B:$Bзадает столбец поиска с именами типов политики.
  • и 0 указывает, что функция выполняет точное совпадение.
  • Как и в случае с формулой первого косвенного обращения, формула вернет #N/A, еслинет совпадений.Вы можете оставить это в своей таблице как #N/A или обернуть это внутри функции =IF(ISNA(VLOOKUP(... или =IFERROR(VLOOKUP(..., чтобы изменить выражение зависимых страниц.

Поместите эту формулу в ячейкуссылаются на другие формулы.

Третье косвенное указание: извлечение связанных заголовков типов политики

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

=IF(COLUMN()-COLUMN($FH:$FH)<INDIRECT(ADDRESS($TNRN,1,,,"TT"))
,INDIRECT(ADDRESS($TNRN,3+COLUMN()-COLUMN($FH:$FH),,,"TT"))
,"")

Скопируйте эту формулу по горизонтали между столбцами, которые должны показать или скрыть данные.

Где (для условия функции IF)

  • COLUMN() ссылается на текущий столбец ячейки с формулой.
  • COLUMN($FH:$FH) ссылается абсолютно либо на ячейку в столбце, либо на весь столбец (например, $G:$G), спервый заголовок должен быть в списке.Разница между этим и приведенным выше даст нулевой индексированный порядковый номер заголовка, который будет отображаться.
  • $TNRN - это абсолютная ссылка на ячейку для значения номера строки из вышеприведенного второго обращения.Это номер строки в таблице имен типов политик, который соответствует типу, связанному с номером политики.
  • 1 предназначен для указания первого столбца таблицы имен типов политик, которая является количеством связанных заголовков.
  • TT - это имя электронной таблицы / страницы, содержащей таблицу имен типов политик, используемую во втором обращении.
  • ADDRESS($TNRN,1,,,"TT") создает адрес электронной таблицы для первого столбца в типе политикиТаблица имен, связанная с типом, связанным с номером политики.Это количество связанных заголовков для имени типа политики.
  • INDIRECT(... берет указанный выше адрес и извлекает значение ссылочной ячейки, то есть количество связанных заголовков.
  • Таким образом,условие оператора IF вернет TRUE, если порядковый номер с нулевым индексом текущего столбца меньше числа столбцов, связанных с именем типа политики.

Где (для TRUE часть функции IF)

  • INDIRECT(... и ADDRESS(... работают так же, как и выше, для извлечения значения ячейки ассоциативного заголовка с нулевым индексом в строке с именем типа политики (например, 3+COLUMN()-COLUMN($FH:$FH)).

et voilà - заголовки динамических переменных из ввода номера политики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...