Ссылка на последний лист в функции Excel для суммирования одного и того же диапазона на нескольких листах - PullRequest
2 голосов
/ 27 марта 2020

Я пробовал несколько вариантов формул, но ничего не получается так, как мне бы хотелось.

Я использую очень простую формулу SUM для суммирования по всем листам в моей книге. В настоящее время он настроен так:

=SUM('1:10'!D3)

Однако я, скорее всего, добавлю больше рабочих листов и хочу, чтобы они были включены в этот итог. Я пробовал несколько разных версий "wshNameLast" или "getlastwsname", которые я нашел в разных статьях здесь, но все они дают мне ошибку #REF. Есть ли здесь формула, которую я могу вставить, не обращаясь к VBA?

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 27 марта 2020

Интересный вопрос.

@ Комментарий BigBen к вопросу >>> «В конце скрытый пустой лист и просто отметьте, что» >>> действительно практично и самое простое решение.

Но только для того, чтобы сделать его динамичным c

Ссылка на .. Ответ Джеффри Вейра и Возвращаемый массив с индексной функцией

и как предложено @Michal Rosa в комментарии к этому вопросу Как создать список имен листов

и как предложено @ashleedawg в комментарии к этому вопросу с использованием косвенной функции для суммирования по нескольким листы

Создана рабочая книга с 5 листами.

Первый лист - Sheet5 и т. д. на последнем - Sheet1.

Каждый лист, кроме первого, имеет значение в B5.

Сначала определено имя для SheetNames массива =GET.WORKBOOK(1)

enter image description here

Тогда было легко Сумма значений в B5 всех листов (включая первый) с этой формулой

* 1 042 *

Но что если нужно ввести формулу в первом листе (Sheet5) в B5, чтобы сложить все оставшиеся листы в B5. Приведенная выше формула возвращает ошибку циркуляции.

Формула ниже может быть введена в первый лист B5, чтобы суммировать все листы от второго до последнего. Обратите внимание, что это array formula. (Скопируйте без фигурных скобок и введите с помощью ctrl+shift+enter)

{=SUMPRODUCT(SUM(INDIRECT("'"&INDEX(SheetNames,N(IF((1),ROW(INDIRECT(2&":"&SHEETS())))))&"'!B5")))}

INDIRECT(2&":"&SHEETS()) начинается массив со второго листа и заканчивается с последним листом (число рассчитывается с помощью функции Sheets ())

Итак, если вы хотите начать массив / сумму с листа № 3, используйте INDIRECT(3&":"&SHEETS()) с Ctrl+Shift+Enter

. Можно заменить ROW function на array of Sheet Numbers. Например, для суммирования только второго и пятого листов

{=SUMPRODUCT(SUM(INDIRECT("'"&INDEX(SheetNames,N(IF((1),{2,5})))&"'!B5")))}

Кроме того, &"'!B5" можно заменить на &"'!"&ADDRESS(ROW(),COLUMN()) для суммирования текущего адреса ячейки формулы на нескольких листах.

...