Excel (2016). Предположим, у меня есть часть Excel в AnalysisSheet который анализирует данные в каком-то другом листе данных. И предположим следующее:
На самом деле таких листов несколько. Например, они могут быть названы MayData , JunData , JulData , и так далее.
Все технические данные идентичны по формату; только их данные разные. Например, это может быть один и тот же финансовый отчет за разные месяцы
AnalysisSheet только когда-либо смотрит на один из листов данных за один раз. В любой точке «использования» он анализирует ЛИБО MayData , ИЛИ ЖЕ JunData , ИЛИ ЖЕ JulData , и т.п.
Таблицы данных могут быть в той же книге, что и AnalysisSheet или они могут быть в другой отдельной рабочей книге, или они могут быть распределены по ряду других рабочих книг, или их комбинации
Мне нужно провести анализ сегодня, и я не хочу бросать камни в мой компьютер (см. Ниже, где я опишу, как я это делаю в настоящее время)
ВОПРОС : В чистом Excel (то есть без VB и без сторонних надстроек), Как мне минимизировать работу, необходимую для того, чтобы пользователь SheetAnalyze изменить, из каких данных берутся данные?
Как я сейчас это делаю
Я использую INDIRECT () для динамического построения ссылок на требуемый лист данных. Так, например, в AnalysisSheet У меня может быть следующее:
B1 = "MayData" (то есть имя листа, содержащего данные)
B2 = "MayReport.xlsx" (т. Е. Имя книги, содержащей таблицу данных; это поле остается пустым, если таблица данных находится в той же книге, что и AnalysisSheet )
B3 = "C23" (например, то есть название некоторой интересующей ячейки в листе данных)
И тогда у меня будет что-то вроде этого в B4:
B4 = CONCATENATE ("'", IF (ISBLANK (B2), "", CONCATENATE ("[", B2, "]")), B1, "'!", B3)
Последний в этом примере создает строку: '[MayReport.xlsx] MayData'! C23
Затем я могу использовать это в INDIRECT () для правильного анализа. Итак, чтобы посмотреть на эту конкретную камеру, я мог бы иметь;
B5 = НЕПРЯМОЙ (B4) (см. Примечание **)
который невосприимчив к изменениям имени таблицы данных или ее рабочей книги (или даже, если на то пошло, названия этой интересующей ячейки, хотя в этом примере я сказал, что все таблицы данных идентичны по формату) ,
Все, что мне нужно сделать, чтобы изменить, какие данные просматриваются, это изменить ячейки B1 и B2. И если я буду осторожен с вещами, я мог бы сократить его до изменения только названия месяца (в этом примере), а затем построить даже то, что в B1 и B2 для этого.
ПРОБЛЕМА В том, что INDIRECT () является изменчивым! В результате, когда набор данных большой и, возможно, происходит много подобных вещей, производительность снижается. В худшем случае, я обнаружил, что мне нужно подождать несколько минут для единственного изменения в одной ячейке в AnalysisSheet , в то время как Excel перебирает каждую функцию INDIRECT () и перезапускает ее. Внизу в области состояния в правом нижнем углу моего листа я вижу, как загружается центральный процессор на всех узлах.
Буду признателен за любые идеи.
** Конечно, как правило, я бы не просто пошел на одну клетку. Вместо этого я бы вытащил одну или несколько целых таблиц из целевого листа данных в лист или листы в той же книге, что и AnalysisSheet , Оттуда все остальное может использовать ссылки на эту локальную версию данных.