Как переключиться на другой лист Excel?

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

  1. На самом деле таких листов несколько. Например, они могут называться MayData, JunData, JulData и так далее.

  2. Все технические данные идентичны по формату; только их данные разные. Например, это может быть один и тот же финансовый отчет за разные месяцы

  3. AnalysisSheet когда-либо просматривает только ОДИН из листов данных. В любой заданной "точке использования" он анализирует ЛИБО MayData, ИЛИ JunData, ИЛИ JulData. и т.п.

  4. Таблицы данных могут находиться в той же рабочей книге, что и AnalysisSheet, или в другой отдельной рабочей книге, или могут быть распределены по ряду других рабочих книг, или их комбинации.

  5. Мне нужно провести анализ сегодня, и я не хочу бросать камни в мой компьютер (см. Ниже, где я опишу, как я это делаю в настоящее время)

ВОПРОС: В чистом 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. Оттуда все остальное может использовать ссылки на эту локальную версию данных.

0 ответов

ВОПРОС: В чистом Excel (то есть без VB и сторонних надстроек) Как минимизировать работу, необходимую для того, чтобы позволить пользователю SheetAnalyze изменить, из каких данных берутся данные?

Это вопрос перспективы. Вы хотите сократить свою работу или уменьшить работу пользователей?

  • Просто,чтобы сократить вашу работу, просто оставьте все, что у вас есть, где она есть. Не редактируйте это, не трогайте это. Выполнение этого не требует никакой работы, и вы не можете иметь меньше, чем никакой работы, так что это оптимальное решение.

  • Чтобы сократить работу пользователей, трудно упростить что-то большее, чем редактирование ячейки, но вы можете улучшить ее и создать более удобную среду для пользователей, используя раскрывающийся список.

Когда ты нуждаешься INDIRECT, тебе нужно INDIRECT Но во многих случаях возможны и другие варианты. Например, именованные диапазоны могут использоваться со связанными рабочими книгами, и они могут быть динамическими с COUNTA, Вещи действительно становятся интересными с тобой CHOOSE а также INDEX в смесь. Просто обязательно избегайте OFFSET потому что это волатильность.

Другие вопросы по тегам