«Мы можем решить любую проблему, введя дополнительный уровень косвенности». - присваивается Дэвид Дж. Уилер
Да, то, что вы описываете, можетбыть сделано с задними страницами или скрытыми строками (или столбцами) и формулами таблицы поиска.
Первое обращение: от номера политики к имени типа политики
Предположим, что номера вашей политики и связанные с ними типы приходятиз дампа базы данных или внутреннего веб-канала было бы удобнее вставить эти данные непосредственно на заднюю страницу, не редактируя и не форматируя их напрямую.См. 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à - заголовки динамических переменных из ввода номера политики.