Excel 2016: ссылка на последний лист в формуле

Итак, у меня есть эта формула (которая работает)

=SUM(SUMIF('Inventory 11.09.2018'!$B$2:$B$47;B2;'Inventory 11.09.2018'!$C$2:$C$47);SUMIF($H:$H;B2;$I:$I))

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

Я провел небольшое исследование и нашел следующее решение: Как сделать так, чтобы моя формула всегда ссылалась на последний лист?

Что я сделал с этим решением, так это определил два имени диапазона.

wshNames

=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))

wshNameLast

=INDEX(wshNames,COUNTA(wshNames)+RAND()*0)

Затем я изменил свою формулу на это:

=SUM(SUMIF(wshNameLast&"!$B$2:$B$47";B2;wshNameLast&"!$C$2:$C$47");SUMIF($H:$H;B2;$I:$I))

Но при нажатии return выдает это сообщение об ошибке: Excel_error_in_formula

Поскольку это немецкий язык, он в основном говорит:

Проблема с этой формулой.

Вы не хотели вводить формулу?

А затем объясняет, что делает апостроф перед формулой.

Если я использую определенные имена исключительно в такой формуле, как

=wshNameLast

они работают. Если я удалю СУММ вокруг такой формулы, просто чтобы проверить, будет ли она работать без СУММ

SUMIF('Inventory 11.09.2018'!$B$2:$B$47;B2;'Inventory 11.09.2018'!$C$2:$C$47)

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

Вопрос: что я делаю не так и как мне приступить к работе? Также я хотел бы решить эту проблему без VB / VBA, если это возможно.


person Kuraiko    schedule 14.09.2018    source источник


Ответы (1)


Вы должны использовать функцию ДВССЫЛ, чтобы преобразовать строку wshNameLast&"!$B$2:$B$47" в диапазон. Как это INDIRECT(wshNameLast&"!$B$2:$B$47").

Полная формула:

=SUM(SUMIF(INDIRECT(wshNameLast&"!$B$2:$B$47");B2;INDIRECT(wshNameLast&"!$C$2:$C$47"));SUMIF($H:$H;B2;$I:$I))
person Marco Vos    schedule 14.09.2018
comment
Спасибо за ответ, Марко! При добавлении в формулу INDIRECT, по крайней мере, не отображается сообщение об ошибке. К сожалению, результатом этой формулы является # ССЫЛКА! (Или # ССЫЛКА? По-немецки это #BEZUG!) Анализ шагов расчета показывает, что после полного разрешения Excel INDIRECT(wshNameLast&"!$B$2:$B$46") эта часть превращается в # ССЫЛКА !. Есть идеи, почему? - person Kuraiko; 14.09.2018
comment
Это означает, что wshNameLast&"!$B$2:$B$46" не является допустимой ссылкой на диапазон. =wshNameLast возвращает существующее имя листа? Когда я проверяю формулу в своем ответе, она не выдает ошибки. - person Marco Vos; 14.09.2018
comment
wshNameLast возвращает имя существующего листа, и это всегда последний рабочий лист. Я заметил, что если я добавлю новый и пустой лист в качестве последнего листа, ошибки больше не будет. Т.е. У меня есть листы Stock, Inventory 11.09.2018 и Sheet1. Переключение инвентаря с листом снова приводит к ошибке. Я просто не вижу, что не так с листом инвентаризации 11.09.2018. В этом нет ничего особенного. Даже формулы не включены! Думаю, я просто перестрою все это шаг за шагом и посмотрю, сработает ли это. - person Kuraiko; 17.09.2018
comment
Хорошо, это было быстро. Просто скопируйте и вставьте содержимое этого рабочего листа инвентаризации в новый, чтобы решить эту проблему. НО переименование нового рабочего листа возвращает ошибку. Выверните пробел в имени листа, это вызовет ошибку! Думаю, тогда я просто буду работать с подчеркиванием. Большое спасибо за помощь, @Marco Vos. - person Kuraiko; 17.09.2018