如何条件格式合并和常规单元格

时间:2019-02-04 18:35:33

标签: google-sheets

我有一个Google工作表,我想添加条件格式,但是合并的单元格有点妨碍。

在我的电子表格中,我具有B,C,D和E列,其中B列使用了公式,用于当C,D和E列“完成”时,B列具有绿色背景。问题是,对于某些行,D和E列已合并。

这是我在B列中使用的公式

=and(C:C="done",D:D="done")

我期望的结果是:当D和E列未合并时,如果C,D和E列“完成”,则B列仅获得绿色背景,否则它将保持空白。 当D和E合并时:如果C和DE被“完成”,否则B仅变为绿色背景,否则保持空白。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果D和E不合并时E 始终具有非空值,则可以使用ISBLANK(E:E)使用该值来检查E是否为空:

=AND(C:C="done", D:D="done", OR(E:E="done", ISBLANK(E:E)))

否则,没有一种方法可以在不使用自定义函数的情况下测试单元格是否是合并范围的一部分,而自定义函数的效率要低得多,但是在技术上可以借助新的辅助列(例如Z列)进行工作。 ):

/**
 * @customfunction
 */
function ISMERGED(cellAddress) {
  var cell = SpreadsheetApp.getActiveSheet().getRange(cellAddress);
  return cell.isPartOfMerge();
}

在Z列(或您为助手选择的任何内容)的每个相关行中都有以下内容(假设数据从第1行开始):

=ISMERGED(ADDRESS(ROW(E1), COLUMN(E1)))
=ISMERGED(ADDRESS(ROW(E2), COLUMN(E2)))
=ISMERGED(ADDRESS(ROW(E3), COLUMN(E3)))

...等等。

然后使用B格式化:

=AND(C:C="done", D:D="done", OR(E:E="done", $Z:$Z))

警告:如果在合并和取消合并之间切换,则Z不会立即包含正确的值,因为自定义函数仅在输入更改时才重新计算(并且单元格的地址不会在此改变)情况)。


更新

这是通过将值放在最顶部的单元格(例如,单元格Z1中的=ISMERGED("E:E"))来按行向下计算整列助手的方法:

/**
 * @customfunction
 */
function ISMERGED(rangeAddress) {
  var range = SpreadsheetApp.getActiveSheet().getRange(rangeAddress);
  var numCols = range.getNumColumns();
  var numRows = range.getNumRows();
  var result = [];
  for (var i=0; i < numRows; i++) {
    var rowRange = range.offset(i, 0, 1, numCols);
    result.push(rowRange.isPartOfMerge());
  }
  return result;
}

答案 1 :(得分:0)

最好的是:

=OR(AND(C:C="done", D:D="done", E:E="done"),     
    AND(C:C="done", D:D="done", ISBLANK(E:E)))

除非第4行,否则将起作用:

,但是您可以用 =CHAR(1) 预先填充整个E列,然后: