计算阴影单元格


10

我正在使用Google Spreadsheets创建一个矩阵(时间/活动)作为员工登录的每日时间表。

是否存在一个公式来计算阴影(或未阴影)某种颜色的列中的单元格数量?

例如:20个单元格是灰色的,而31个单元格不是灰色的(用任何其他颜色阴影),它不是在手动计算它们,而是在到达范围列的底部进行计算。


@ w0lf解决方案的问题来自缓存。该功能尚未准备就绪,无法实时更新。我试图通过添加“ now()”作为额外的参数来获得该功能,但是它不起作用。
2013年

我无法回答,所以我只留下评论。如果单元格没有任何文本,则可以更轻松地在内部添加与背景颜色相同的任何文本(因此它是隐藏的),然后只需执行简单的= counta()即可计数非空单元格。当然,这要视情况而定。
sfratini

Answers:


17

我已经找到一种使用Google Spreadsheet提供的脚本功能来做到这一点的方法。

方法如下:

  • 打开电子表格
  • 在菜单中,转到工具->脚本编辑器...; 这将打开一个新窗口,允许您输入代码
  • 复制下面的代码
  • 将代码粘贴到“脚本编辑器”窗口中,然后按CTRL+ S保存
  • 关闭脚本编辑器窗口,然后返回电子表格

码:

function getBackgroundColor(rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var cell = sheet.getRange(rangeSpecification);
  return cell.getBackground();
}

function sumWhereBackgroundColorIs(color, rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if(cell.getBackground() == color)
        x += parseFloat(cell.getValue());
    }
  }
  return x;
}

function countCellsWithBackgroundColor(color, rangeSpecification) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(rangeSpecification);
  var x = 0;
  for (var i = 1; i <= range.getNumRows(); i++) {
    for (var j = 1; j <= range.getNumColumns(); j++) {
      var cell = range.getCell(i, j);
      if(cell.getBackground() == color)
        x++;
    }
  }
  return x;
}

完成上述步骤后,电子表格中将提供另外三个功能:

  • countCellsWithBackgroundColor(<color>, <range specification>)
  • sumWhereBackgroundColorIs(<color>, <range specification>)
  • getBackgroundColor(<cell specification>)

请注意,<range specification><cell specification>A1表示法表示,并且必须用引号引起来

例如,要获取背景颜色设置为白色的 B2:F13范围内所有单元格的计数,您应该输入以下公式:

=countCellsWithBackgroundColor("white", "B2:F13")

并使用以下公式计算相同单元的总和:

=sumWhereBackgroundColorIs("white", "B2:F13")

某些单元格可能没有将背景设置为“白色”,“灰色”之类的颜色,而是将RGB颜色设置为#6fa8dc。您无法猜测颜色是什么,因此,如果要找出单元格的颜色(例如B9),则应在单元格中输入以下公式:

=getBackgroundColor("B9")

然后将此值用作上述两个函数的参数。

看来,如果单元格的背景色是“主题色”,则getBackground()总是错误地返回#ffffff。除了使用标准设置中的颜色外,我没有找到其他解决方法。

同样,请注意上述所有示例中的引号;没有它们,公式将无法工作。


我一直在尝试遵循您的提示,但是在该字段中,我使用的公式是#NUM !,您知道为什么吗?我试图做一些研究,但是我找不到确切的答案。感谢百万,

@Dami您可以在此处发布您的公式吗?此外,检查拼写-我认为公式名称是区分大小写
克里斯蒂安Lupascu

尽管遵循了说明,但在这里只得到零...

getBackgroundColor()已被弃用。也许您可以更新代码?
Jacob Jan Tuinstra 2013年

当我将背景色更改为另一个值时,总和不会更新。当我进行一些更改时,是否可以自动更新总和?
MichalKováč13年

0

我还没有找到一种方法来直接计算Google文档中具有特定颜色的单元格。

是什么使它们阴影化。它是自动的吗?如果它们具有值,它们会自动着色吗?如果是这种情况,您可以使用counta()函数对带有值的任何单元格进行计数。如果涉及更复杂的规则集,则可能需要使用countif()函数。

注意:您可能需要考虑该列顶部或底部的所有多余行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.