Я видел этот вопрос, и хотя я сталкиваюсь с той же проблемой, ответ на этот вопрос не полезен для моего случая.
У меня есть большие таблицы, которые часто меняются. Таким образом, в соответствии с решением, принятым для этого вопроса, трудно дублировать все заполненные столбцы, и каждый раз, когда я хочу внести изменения в цвета фона ячеек, сложно редактировать еще одну ячейку.
Разве нет способа суммировать данные на основе условия, касающегося цвета фона ячейки в таблицах Google?
Пожалуйста, от того, что rangeSpecificationпараметры требуют кавычек ( ") вокруг них.
Например:
=sumWhereBackgroundColorIs("white", "A1:C4")
суммирует значения всех ячеек в диапазоне A1: C4, которые имеют белый фон.
Обратите внимание, что если вы не знаете цвет определенной ячейки, вы можете использовать предоставленную getBackgroundColorфункцию, чтобы узнать, какой это цвет. Эта функция необходима, потому что некоторые цвета выражаются в виде кодов RGB (например, #00ff00вместо green).
Галерея скриптов была заменена надстройками. Я не могу найти "сумма по цвету" под надстройками. Нужно ли добавлять свой скрипт в дополнения, чтобы он был там доступен?
Джефф Локхарт
3
@ w0lf Новые таблицы Google, похоже, больше не поддерживают галерею скриптов. Он перенаправляет с сообщением на новые дополнения. Редактор сценариев все еще доступен, и я использовал ваш код там. Я сделал форк и добавил поддержку пропуска пустых (не числовых) ячеек в сумме (в противном случае возникает ошибка, если в диапазоне существуют пустые ячейки): gist.github.com/jeffdgr8/1553faa6360ad04e9c17
Джефф Локхарт,
2
Вот как я получил это на работу:
Открыть Tools>Script Editor
Вставьте код ниже, сохраните скрипт
Вернитесь к своей таблице. Используйте =countColoredCells(A1:Z5,C5)где C5ячейка с цветом для подсчета.
Код:
/**
* @param {range} countRange Range to be evaluated
* @param {range} colorRef Cell with background color to be searched for in countRange
* @return {number}
* @customfunction
*/
function countColoredCells(countRange,colorRef) {
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();
var rangeA1Notation = formula.match(/\((.*)\,/).pop().trim();
var range = activeSheet.getRange(rangeA1Notation);
var bg = range.getBackgrounds();
var values = range.getValues();
var colorCellA1Notation = formula.match(/\,(.*)\)/).pop().trim();
var colorCell = activeSheet.getRange(colorCellA1Notation);
var color = colorCell.getBackground();
var count = 0;
for(var i=0;i<bg.length;i++)
for(var j=0;j<bg[0].length;j++)
if( bg[i][j] == color )
count=count+1;
return count;
};
getBackgroundColor()
рекомендуется. Возможно, вы можете обновить код?Вот как я получил это на работу:
Открыть
Tools
>Script Editor
Вставьте код ниже, сохраните скрипт
Вернитесь к своей таблице. Используйте
=countColoredCells(A1:Z5,C5)
гдеC5
ячейка с цветом для подсчета.Код:
Код кредитов (изменен): http://igoogledrive.blogspot.lt/2015/11/google-spreadsheet-count-of-colored.html
источник
TypeError: Cannot call method "pop" of null. (line 13, file "Code")Dismiss