РЕДАКТИРОВАТЬ: как Скотт указывает в своем комментарии, ответ ниже не предоставляет возможность навигации и редактирования исходных данных, он только отображает их. Его ответ дает решение вопроса. Я оставлю ответ на месте в качестве общей информации на тот случай, если кому-то понадобится метод, чтобы просто отобразить выбранные данные, и потому что ответ Скотта ссылается на него.
Существует относительно простой способ сделать то, что вы хотите, создавая нужный вывод в другом месте, а не пытаясь скрыть строки (я полагаю, что для этого потребуется VBA). Описанная вами проблема состоит из двух частей: ввод выбранных вами значений в список с разделителями-запятыми и их использование, а также отображение выбранных строк. Вы можете упростить это, перечислив свой выбор по отдельности в столбце, поэтому сначала я расскажу о результатах.
Вывод, который вы хотите сделать, можно выполнить с помощью функции VLOOKUP Вы можете создать одну общую формулу и повторить ее при необходимости. На этом шаге я предполагаю, что ваш выбор указан отдельно в столбце. Если вы введете их таким образом, все, что вам нужно, это этот шаг. Если вы хотите использовать список с разделителями-запятыми, второй шаг расшифрует его, чтобы создать отдельные выборки в столбце.
Итак, давайте предположим, что ваши ссылочные имена находятся в столбце A, связанные данные находятся в 97 смежных столбцах, и все данные находятся в строках со 2 по 1001. Я опишу, как сделать вывод в другом месте на том же листе. Если вы хотите сделать это на отдельном листе, просто включите ссылку на лист как часть любой ссылки на ячейку, которая указывает на ваши данные.
Предположим, что ваш вывод начинается в столбце DA, строка 2, и включает в себя следующие 97 столбцов. Выборы вводятся в DA2 - DA50, или сколько вам нужно. Запись в DB2 будет:
=IFERROR(VLOOKUP($DA2,$A$2:$CW$1001,COL(DB2)-COL($DA2)+1,FALSE),"")
Краткое объяснение: IFERROR в начале и двойные кавычки в конце приводят к пустому выводу, если поиск приводит к ошибке. Это произойдет, если в DA нет записи. Так что если вы начнете без записей, вывод будет пустым. Если есть 10 записей, все строки после этого будут пустыми.
VLOOKUP ищет выбор, введенный в DA2, работает со всеми данными (я показываю его как A2:CW1001), сравнивает DA2 с записями в столбце A ("false" указывает точное совпадение) и возвращает содержимое в связанный столбец данных для соответствующей строки. Поскольку выходные столбцы находятся в тех же относительных позициях, что и данные, функции COL вычисляют эквивалентный столбец в данных. Скопируйте эту формулу во все выходные столбцы и столько строк, сколько вам нужно.
Поскольку выборки вводятся в столбец DA, появляются данные для каждого выбора. Если вы хотите ввести выбор в виде списка с разделителями-запятыми, имейте в виду, что для ячейки существует ограничение по количеству символов. Если вы говорите о 50 выборках, а уникальные ссылки длинные, это может превышать ограничение на количество символов. Тем не менее, вот способ расшифровки. Я опишу метод, который не элегантен, но делает его простым и легким для отладки.
Предположим, вы вводите свой список в DA1. Мы будем использовать три столбца слева от DA для декодирования списка, то есть CX, CY и CZ. В CX мы находим запятые. Формула в CX2:
=FIND(",",DA1)
После первой запятой нам нужно указать функции FIND, с чего начать искать следующую, поэтому CX3:
=FIND(",",$DA$1,CX2+1)
Эту формулу можно скопировать для любого количества строк. В каждом ряду он начнет искать в позиции символа после последней запятой. Далее мы перейдем к столбцу CZ и вычислим длину каждого выбора. В CZ2 формула имеет вид:
=IF(ISERROR(CX2),LEN($DA$1),CX2-1)
Если запятая не была найдена (была возвращена ошибка), в списке была либо ноль, либо одна запись, и в этом случае длина равна той, которая находится в списке. В противном случае это на один символ меньше, чем позиция запятой. Для CZ3 формула имеет вид:
=IF(ISERROR(CX2),NA(),IF(ISERROR(CX3),LEN($DA$1)-CX2,CX3-CX2-1))
Если в предыдущем поиске запятая не найдена, это означает, что для этой строки нет выбора для декодирования, и возвращается код ошибки. Если для текущей строки запятая не найдена, это означает, что есть еще одна запись, и ее длина - это все, что находится после последней запятой. Если найдена другая запятая, длина - это символы между двумя последними запятыми. Эту формулу можно скопировать для любого количества строк.
В столбце CY мы рассчитываем начальную позицию каждой записи в списке. CY2 не нуждается в значении, потому что это всегда начало. Формула в CY3:
=CZ2+2
Это символ после длины первого элемента плюс запятая. Формула в CY4:
=CY3+CZ3+1
Это начальная позиция предыдущего элемента плюс длина предыдущего элемента плюс запятая. Скопируйте это столько строк, сколько вам нужно. Теперь вы определили, где найти запись в списке для каждой строки. Следующим шагом является заполнение выборов. Формула для DA2:
=IF(ISBLANK(DA1),"",LEFT(DA1,CZ2))
Если список пуст, возвращается пустое. В противном случае он принимает крайние левые символы для предварительно рассчитанной длины. Формула для DA3:
=IF(OR(ISBLANK($DA$1),ISNA(CZ3)),"",MID($DA$1,CY3,CZ3))
Если либо список пуст, либо вычисление длины вернуло #NA, результат будет пустым. В противном случае он использует рассчитанную начальную позицию и длину, чтобы вернуть эти символы из списка. Эту формулу можно скопировать для любого количества строк. Теперь вывод работает так же, как и в первой части, из списка с разделителями-запятыми заполняются только записи выбора.