Интересный вопрос.
@ Комментарий BigBen к вопросу >>> «В конце скрытый пустой лист и просто отметьте, что» >>> действительно практично и самое простое решение.
Но только для того, чтобы сделать его динамичным c
Ссылка на .. Ответ Джеффри Вейра и Возвращаемый массив с индексной функцией
и как предложено @Michal Rosa в комментарии к этому вопросу Как создать список имен листов
и как предложено @ashleedawg в комментарии к этому вопросу с использованием косвенной функции для суммирования по нескольким листы
Создана рабочая книга с 5 листами.
Первый лист - Sheet5
и т. д. на последнем - Sheet1
.
Каждый лист, кроме первого, имеет значение в B5
.
Сначала определено имя для SheetNames
массива =GET.WORKBOOK(1)
Тогда было легко Сумма значений в 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())
для суммирования текущего адреса ячейки формулы на нескольких листах.