Рубрики
Статьи специалистов

3D сумма, но в Таблицах Друзья, в MS Ex…

3D сумма, но в Таблицах

Друзья, в MS Excel есть функция 3D сумма, она позволяет суммировать ячейку от одного листа до другого, не перечисляя листы, которые будут между. Например, смотрите на гифку — от листа «янв» до «апрель».

В Таблицах такой встроенной функции нет, но мы для вас её повторили с помощью пользовательской функции (скрипт, который вы сможете запускать из листа), код ниже:

function SumSum(shFrom, shTo, cell){
const ss = SpreadsheetApp.getActive();
const sheets = ss.getSheets();
let sum = 0;
let x = ss.getSheetByName(shFrom).getIndex();
let y = ss.getSheetByName(shTo).getIndex();

for(x; x <= y; x++){
const sheet = sheets[x-1];
sheet ? sum += sheet.getRange(cell).getValue() : '';
}
return sum;
}

Давайте попробуем разобрать все по строкам:
название функции и аргументы, которые будем в неё передавать из листа (лист начала, листа конца, ячейка, все должно быть в кавычках)
function SumSum(shFrom, shTo, cell){

определяем переменные ss, sheets, x, y и кладём в них текущую активную Таблицу, массив листов, индекс первого листа, индекс последнего листа:
const ss = SpreadsheetApp.getActive();
const sheets = ss.getSheets();
let x = ss.getSheetByName(shFrom).getIndex();
let y = ss.getSheetByName(shTo).getIndex();

определяем sum – тут будет собираться наша сумма
let sum = 0;

начало нашего цикла, начинаем от индекса первого листа и продолжаем до индекса последнего листа включительно
for(x; x <= y; x++){

каждый шаг цикла
открываем Лист
const sheet = sheets[x-1];

проверяем, существует ли лист, если существует — достаём из него нужную нам ячейку и добавляем к sum
sheet ? sum += sheet.getRange(cell).getValue() : '';

завершаем цикл
}

возвращаем sum (в ячейку) и завершаем функцию
return sum;
}

==
Формула для запуска из листа должна выглядеть как-то так:
=SumSum("янв"; "апрель";"a1")

===
📕 Оглавление канала
📘 Канал: @google_sheets
📗 Чат: @google_spreadsheets_chat