В Google Spreadshets, как вы можете просмотреть все доступные листы, не зная общего количества?


10

Я веду статистику бейсбольной команды моей дочери. У меня есть лист для каждой игры, каждая из которых идентична по структуре. Я хочу создать сводный лист, который суммирует числа с других листов. Как мне составить формулы для ссылки на N листов?

Пример:

=G1!C2+G2!C2+G3!C2

Я не хочу возвращаться и менять каждую формулу при добавлении нового листа.

Обновление: поиск по справке Google, я не думаю, что это поддерживается. То, что я делаю, называется трехмерным диапазоном, и хотя оно поддерживается в Excel, оно не поддерживается в электронной таблице Google.


1
Эти вопросы и ответы, которые я дал, также могут быть интересны: webapps.stackexchange.com/a/42960/29140
Джейкоб Ян Туинстра,

Ответы:


18

Если вы не возражаете против использования макроса, вы можете сделать следующее. Добавьте этот скрипт в вашу электронную таблицу (Инструменты -> Сценарии -> Редактор скриптов):

function getTotalSum(cell) {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    var sum = 0;
    for (var i = 0; i < sheets.length ; i++ ) {
        var sheet = sheets[i];
        var val = sheet.getRange(cell).getValue();

        if (typeof(val) == 'number') {
            sum += val;   
        }       
    }

    return sum;
}

и используйте формулу = getTotalSum ("A1") , где "A1" - это ячейка, которую вы хотите суммировать на всех листах (кроме той, в которую вы помещаете формулу).

Я создал тестовый скрипт, который вы можете посмотреть по адресу: https://spreadsheets.google.com/ccc?key=0Ao3E95ou1MgbdG45blRvWlVaYkxFY01PQUhvZkZQcEE&hl=en&authkey=CPyZqxk


Это именно то, что я ищу, но каждый раз, когда скрипт запускается, он добавляет значение, которое в данный момент находится в ячейке, поэтому я получаю больше, чем сумма листов в ячейке при каждом запуске. Как я могу заставить его удалить / заменить текущее значение и просто добавить сумму других листов?
Кит

Используете ли вы ту же позицию в ячейке, чтобы сделать резюме? Если так, то это, вероятно, добавляет это к общему количеству. И затем, когда вы запустите его снова, он добавляет новую сумму к старой сумме и т. Д. И т. Д. Если вы просто поместите ее в другую ячейку, она должна работать. Если вы не хотите этого делать, вам нужно изменить сценарий, чтобы получить идентификатор текущего листа, а затем добавить проверку в оператор if, чтобы он не включал это. Сначала добавьте выше для цикла: var thissheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();Затем во-вторых измените оператор if следующим образом:if (typeof(val) == 'number') && (i != thissheet)
goodship11

К сожалению, неверный синтаксис в операторе if. Используйте это:if (typeof(val) == 'number' && i != thissheet)
goodship11

1
Если значения других ячеек изменяются, возвращаемое значение не обновляется, поскольку пользовательская функция запускается только при изменении ее параметров.
Рубен

0

Если кто-то наткнулся на этот вопрос и столкнулся с той же проблемой, есть 3D Reference Add-On для Google Sheets, который позволяет определять диапазоны для нескольких листов и может использоваться с собственными функциями, такими как = SUM ()

Некоторые пояснения на странице авторов

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.