在Google电子表格中计算具有相同颜色的单元格

use*_*764 13 google-apps-script

我正在尝试计算具有相同背景颜色的单元格数量,并将结果放在谷歌应用程序脚本中的脚本的其他单元格中,但我不能这样做.我有下一个脚本但没有工作,我不知道哪个是问题:

function countbackgrounds() {
 var book = SpreadsheetApp.getActiveSpreadsheet();
 var range_input = book.getRange("B3:B4");
 var range_output = book.getRange("B6");
 var cell_colors = range_input.getBackgroundColors()[0];
 var color = "#58FA58";
 var count = 0;

 for( var i in cell_colors )
  if( cell_colors[i] == color ){
    range_output.setValue(++count);
  }
  else {
    return count; 
  }
 }  
Run Code Online (Sandbox Code Playgroud)

Wol*_*lph 23

如果您不想使用Google表格电动工具手动编码,请轻松解决:

  1. 通过"加载项"面板安装Power Tools(加载项 - >获取加载项)
  2. 从电动工具侧栏单击Σ按钮,在该菜单中单击"按颜色求和"菜单项
  3. 选择带有要搜索的颜色标记的"图案单元格"
  4. 为要计数的单元格选择"源范围"
  5. 使用功能应设置为"COUNTA"
  6. 按"插入功能",你就完成了:)

  • 当所有范围都已输入时,我遇到“请选择包含数据的范围并重试”的问题,如何解决? (3认同)

Sca*_*ael 8

function countbackgrounds() {
 var book = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = book.getActiveSheet();
 var range_input = sheet.getRange("B3:B4");
 var range_output = sheet.getRange("B6");
 var cell_colors = range_input.getBackgroundColors();
 var color = "#58FA58";
 var count = 0;

 for(var r = 0; r < cell_colors.length; r++) {
   for(var c = 0; c < cell_colors[0].length; c++) {
     if(cell_colors[r][c] == color) {
       count = count + 1;
     }
   }
 }
    range_output.setValue(count);
 }
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以使用此工作脚本:

/**
* @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();
  var range = activeSheet.getRange(rangeA1Notation);
  var bg = range.getBackgrounds();
  var values = range.getValues();

  var colorCellA1Notation = formula.match(/\,(.*)\)/).pop();
  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;
};
Run Code Online (Sandbox Code Playgroud)

然后在你的谷歌表格中调用这个函数:

=countColoredCells(D5:D123,Z11)
Run Code Online (Sandbox Code Playgroud)

  • 上面的函数有几个问题:正则表达式在参数中以空格分隔,函数的参数从未使用,“values”变量从未使用。 (2认同)