如何在取决于另一个单元格值的特定单元格上设置条件格式?


69

在我的示例中,我想有条件地格式化B列单元格。标有x的代码应根据A列中的值进行格式化(在示例中,值为1):

A | B
1 | x
2 | 
3 | 
1 | x
1 | x
4 | 
8 |

// x can be any value and is here merely to mark the cell that should be formatted

2014年重要提示:在Google表格中现在可以根据可能包含其他单元格的公式进行条件格式设置,其工作方式与Excel电子表格的工作方式非常相似。 该答案说明了其用法。


3
自从您添加了2014年注释后,请考虑将对勾标记移到描述现代方法的答案上。

Answers:


50

可以使用Google Apps脚本在Google Spreadsheets中实现复杂的条件格式。例如,您可以编写一个函数,该函数根据其中一行单元格中的值更改整个行的背景颜色,我认为使用“使用规则更改颜色”菜单无法实现这一功能。您可能希望为此功能设置触发器,例如“ On Edit”,“ On Open”和“ On Form Submit”。

setBackgroundRGB()函数的文档

更新:这是一个Google Apps脚本示例,该示例根据A列中的值更改整个行的背景色。如果该值为正,请使用绿色。如果为空,则为白色。否则为红色。在此公开的Google电子表格中查看结果。(您必须先登录才能运行脚本,但是如果未登录,仍然可以看到结果)。

function colorAll() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var endRow = sheet.getLastRow();

  for (var r = startRow; r <= endRow; r++) {
    colorRow(r);
  }
}

function colorRow(r){
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(r, 1, 1, 3);

  var data = dataRange.getValues();
  var row = data[0];

  if(row[0] === ""){
    dataRange.setBackgroundRGB(255, 255, 255);
  }else if(row[0] > 0){
    dataRange.setBackgroundRGB(192, 255, 192);
  }else{
    dataRange.setBackgroundRGB(255, 192, 192);
  }

  SpreadsheetApp.flush(); 
}

function onEdit(event)
{
  var r = event.source.getActiveRange().getRowIndex();
  if (r >= 2) {
    colorRow(r);
  }
}

function onOpen(){
  colorAll();
}


我在第13行出现错误:var dataRange = sheet.getRange(r,1,1,3); 如果我想使用此脚本根据特定名称(例如David)为行着色,我将如何更改它。而且我可能会更改字体而不是背景:setFontColor另外,如何在电子表格上运行脚本?谢谢

2
该示例的链接不再有效。创建脚本后如何使用?该答案中缺少该内容。
Daniel Williams

3
对于最常见的用例,现在有一个更简单的选项,下面的答案中对此进行了描述。
山姆·布莱曼2013年

1
很遗憾,Google Spreadsheet链接已损坏。简短说明如何使用/激活脚本将是很好的。然而,很好的答案才行得通。:)
brimborium

19

新的谷歌表可以让你做到这一点,如所描述这里。您必须先按照文章中的说明在Google驱动程序设置中启用新的电子表格。然后,您可以从条件格式选项中选择“自定义公式是”,然后输入任何公式(不要忘记添加=前缀!)。$如预期的那样,不带前缀的单元格引用在应用于范围时会自动调整。

似乎缺少从旧到新迁移的支持-它仅适用于新工作表,我发现只能将值从一个复制到另一个。可以复制整张纸。


1
感谢您指出了这一点。它确实按我的意愿工作。
罗伯特·科里特尼克

目前,大多数旧的电子表格已迁移到新的Google表格中,因此有关迁移支持的说明已过时。
鲁本2015年

2

我使用Apps-Script 编写了这个Web应用程序Color Code +,以满足大多数基本的条件格式设置需求。输入一些规则,它将吐出代码,然后将其粘贴到电子表格中的“ 工具” →“ 脚本编辑器...”下。(Google论坛上的帮助主题。)


1

如果您要在两个单元格中的总和与第三个单元格中的总和不同时想要使用红色背景有条件地格式化,则Google表格的条件格式规则如下所示:

带有单色和自定义公式的Google表格条件格式规则


0

条件格式-自定义公式

range 2:227

= if($i:$i = "Duplicate",True,False)

选择要突出显示行的颜色。


0

(2017年2月)如另一个答案中所述,Google表格现在允许用户直接从用户界面添加条件格式,无论是在台式机/笔记本电脑,Android还是iOS设备上。但是,此答案的其余部分主要是针对开发人员的,因为您可以编写“执行”条件格式的应用程序。

使用Google Sheets API v4(及更高版本),开发人员现在可以编写具有CRUD条件格式设置规则的应用程序。请查看指南示例页面,以获取更多详细信息以及参考文档(搜索{add,update,delete}ConditionalFormatRule)。该指南包含以下Python代码段(假定文件ID为SHEET_IDSHEETS作为API服务端点):

myRange = {
    'sheetId': 0,
    'startRowIndex': 1,
    'endRowIndex': 11,
    'startColumnIndex': 0,
    'endColumnIndex': 4,
}

reqs = [
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {'textFormat': {'foregroundColor': {'red': 0.8}}}
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {
                    'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4}
                },
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
]

SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body={'requests': reqs}).execute()

除Python外,Google API还支持多种语言,因此您可以选择。无论如何,该代码示例对工作表进行了格式化(请参见下图),以使年龄中位数以下的那些以浅红色突出显示,而年龄中位数以上的那些则以红色字体显示其数据。

条件格式示例

注意:我的回答与该问题的答案相同,只是我放弃了PSA,因为它不需要生活在> 1的地方。


在SO提到的问题上,也有对该问题的几个答案。该答案所指的是“另一个答案”?(:另一方面,虽然来此网站的人可以编写代码,但我认为他们中的大多数人都像“自定义功能/用户定义功能”那样以“最终用户开发”的方式进行操作。我不确定诸如CRUD他们大多数人都知道,他们可以找到答案中包含的所有其他详细信息。
Rubén17年

0

为了解决“新”表中Q的具体问题,我建议清除B:B中的所有条件格式,选择ColumnB并应用“ 自定义”公式是

=A1=1

与选择和格式Done


0

编辑条件格式时,请选择“ 自定义公式”,然后使用以下...

=if(A1 = 1 , true)

选择您的颜色,您就完成了。


-1

根据问题的说明进行编辑:

在您的Google Spreadsheet窗口中,有一个菜单Format,带有“使用规则更改颜色”选项。这与Google Spreadsheet的条件格式一样技术。据我所知,无法根据另一个单元格的值为一个单元格着色-Google不允许您输入其他单元格的公式。

除非您将其他数据放入B列中,否则始终可以使B列的所有内容等于A列,然后使用“使用规则更改颜色”选项以相同的颜色为所有值为1的单元格上色-即,值为1时为红色背景和红色文本,否则为白色背景和白色文本,有效地将值隐藏在B列中。这将为您提供所需的外观。

在Excel中,您可以执行所需的操作。以您的数据为例,当此公式为true时,我有条件地格式化了B1:

=IF(A1=1,true,false)

然后向下拖动格式,仅突出显示B中与A列相邻的单元格等于1的单元格。

Excel可以做到,但Google不能做到


原始答案

我不确定是否可以在2列中执行此操作,但是我知道您可以在3列中执行此操作:

 A  |  B  |  C
----------------
 1  |  f  |  x

在B列中,可以使用IF公式查看x是否已放置在适当的C列中:

=IF(C1="x",A1,"") 

IF公式包含3个部分-测试,then值和else值。在上面的示例中,该公式检查以查看xC列中是否存在。如果存在,则输入A1中的值,否则,输入空白。x大小写无关紧要。

在列表顶部输入此公式后,即可使用拖动功能将公式向下拖动到列表的其余部分。在单元格以蓝色突出显示的情况下,将鼠标移到右下角的正方形上,直到光标变为十字准线。然后只需单击并按住,同时向下拖动即可将公式复制到下面的单元格中。


1
我想你误会了我。问题是关于条件格式设置,而不是将值放在单元格中。
罗伯特·科里特尼克

1
目前,此答案已过时。见应用条件格式规则-文档编辑器的帮助
鲁本
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.