Excel - 根据值的更改着色整行

时间:2010-11-10 16:50:24

标签: excel

我想根据一个单元格的值在Excel中对整行进行着色。例如,说我有下面的行:

**File No**
1122
1122
1144
1155
1155
1155
1166

我希望前两行(文件#的值为1122)以颜色1加阴影,下一行(文件#的值为1144)加上颜色2阴影,接下来的3行(其中文件#的值为1155)为阴影颜色1,下一行(文件#的值为1166)为阴影颜色2

11 个答案:

答案 0 :(得分:60)

您可以执行的操作是在电子表格的右侧创建一个新列,您可以使用该列来计算可以基于阴影的值。

假设您的新列是D列,您要查看的值位于第2行的第A列。

在单元格D2中:= MOD(IF(ROW()= 2,0,IF(A2 = A1,D1,D1 + 1)),2)

根据需要将其填满(如果需要,则隐藏列)。

现在突出显示您的整个数据集 - 此选择的单元格将在下一步中显示阴影。

主页标签中,点击条件格式,然后点击新规则

选择使用公式确定要格式化的单元格

在“格式化此公式为真的值”中,输入 = $ D2 = 1

点击格式按钮,点击填充标签,然后选择要加阴影的颜色。

这里的例子:

答案 1 :(得分:4)

如果您使用的是MS Excel 2007,则可以使用conditional formatting标签上的Home,如下面的屏幕截图所示。您可以像我在此处使用color scales默认选项一样使用,也可以根据您的数据集创建new ruleConditional Formatting

答案 2 :(得分:4)

使用Conditional Formatting

以最简单的形式,你说“对于这个单元格,如果它的值是X,则应用格式foo”。但是,如果使用“公式”方法,则可以选择整行,输入公式和关联格式,然后对表格的其余部分使用复制和粘贴(仅限格式)。

您只能在Excel 2003或更早版本中使用3个规则,因此您可能希望为颜色定义模式而不是使用原始值。这样的事情应该有效:

alt text

答案 3 :(得分:4)

我找到了Pearson Software Consulting内容绑定的简单解决方案: 假设标题是从A1到B1,表数据是从A2到B5,控制单元格在A列中

  1. 制作一个新列,C
  2. 首先,要着色的第一行使C2单元格中的公式= true
  3. 在第二行中,使公式= IF(A3 = A2,C2,NOT(C2))
  4. 将列填充到最后一行
  5. 选择数据范围
  6. 选择条件格式,选择使用公式... 并将= $ C2作为公式

答案 4 :(得分:4)

这个让我困惑多年。不喜欢创建额外(不相关)行/列只是为了计算格式。最后提出了以下规则:

=INDIRECT("A"&ROW())<>INDIRECT("A"&(ROW()-1))

这会为第2行创建引用A2<>A1,为第3行创建A3<>A2等。 将字母“A”调整为您要比较的列

答案 5 :(得分:3)

我讨厌使用这些in-cell公式并且必须填写一个新列,我终于学会了用自己的VBA宏来完成这个效果。

这可能与其他答案在逻辑上不同,但我认为代码看起来好多了:

Dim Switch As Boolean
For Each Cell In Range("B2:B" & ActiveSheet.UsedRange.Rows.Count)
    If Not Cell.Value = Cell.Offset(-1, 0).Value Then Switch = Not (Switch)
    If Switch Then Range("A" & Cell.Row & ":" & Chr(ActiveSheet.UsedRange.Columns.Count + 64) & Cell.Row).Interior.Pattern = xlNone
    If Not Switch Then Range("A" & Cell.Row & ":" & Chr(ActiveSheet.UsedRange.Columns.Count + 64) & Cell.Row).Interior.Color = 14869218
Next

我的代码在B列中,它假设一个标题行,所以从2开始,我使用Chr(x + 64)方法获取列字母(这不会超过Z列;我没有还没有找到一个简单的方法来解决这个问题。

首先,每当值更改为新值时,布尔变量将交替使用(使用“偏移量”检查上面的单元格),并且对于每次传递,将检查行的True或False并相应地对其进行着色。

答案 6 :(得分:1)

我必须为我的用户做类似的事情,他们希望有一个小变种,他们希望有一个运行编号来分组相似的项目。以为我会在这里分享。

  • 制作新专栏A
  • 假设第一行数据位于第2行(第1行是标题),请将1放入A2
  • 假设您的文件号在B列中,在第二行(在本例中为A3)中,制作公式=IF(B3=B2,A2,A2+1)
  • 将单元格A3向下填充/复制粘贴到最后一行(注意不要意外复制A2;这将用1填充所有单元格)
  • 选择数据范围
  • Home 功能区中选择条件格式 - &gt; 新规则
  • 选择使用公式确定要格式化的单元格
  • 在公式单元格中,将=MOD($A1, 2)=1作为公式
  • 点击格式,然后选择填充标签
  • 选择所需的背景颜色,然后单击“确定”
  • 点击确定

enter image description here

答案 7 :(得分:1)

在MS Excel中,首先将工作簿保存为Macro Enabled文件,然后转到Developper选项卡并单击Visual Basic。将此代码复制并粘贴到&#34; ThisWorkbook&#34; Excel对象。将G =和C =的2个值替换为包含所引用值的列的编号。

在您的情况下,如果列的编号为&#34;文件号&#34;是第一列(即第1列),由G=6替换G=1C=6替换C-1。最后点击Macro,选择并运行它。瞧!像魅力一样。

Sub color()
    Dim g As Long
    Dim c As Integer
    Dim colorIt As Boolean

    g = 6
    c = 6
    colorIt = True

    Do While Cells(g, c) <> ""
        test_value = Cells(g, c)
        Do While Cells(g, c) = test_value
            If colorIt Then
                Cells(g, c).EntireRow.Select
                Selection.Interior.ColorIndex = 15
            Else
                Cells(g, c).EntireRow.Select
                Selection.Interior.ColorIndex = x1None
            End If
            g = g + 1
        Loop
        colorIt = Not (colorIt)
    Loop
End Sub

答案 8 :(得分:1)

至少在这里至少有一个其他贡献者,我也从未喜欢过添加额外的&#34;帮助&#34;专栏,可以在各种情况下造成一些麻烦。我终于找到了解决方案。根据需要和列中的内容,是否有空白值等,您可以使用几种不同的公式。对于我的大多数需求,我已经使用以下简单公式进行条件格式化(CF)式:

=MOD(Fixed(SUMPRODUCT(1/COUNTIF(CurrentRange,CurrentRange))),2)=0

我创建一个名为&#34; CurrentRange&#34;使用以下公式,其中[Sheet]是您的数据生成的工作表,[DC]是包含您要为其分配数据的值的列,[FR]是第一行数据在:

=[Sheet]!$[DC]$[FR]:INDIRECT("$[DC]$" & ROW())

工作表引用和列引用将基于具有您正在评估的值的列。注意:您必须在公式中使用命名范围,因为如果您尝试直接在CF规则公式中使用范围引用,则会引发错误。

基本上,该公式的工作原理是为每一行计算该行及其上方所有唯一值的计数。每行的该值实质上为每个新唯一值提供了升序唯一ID。然后它在标准CF MOD函数公式中使用该值代替Row()函数,用于简单的交替行颜色(即= Mod(Row(),2)= 0)。

请参阅以下示例,该示例分解公式以在列中显示结果组件以显示其在幕后执行的操作。

Example Data

在此示例中,CurrentRange命名范围定义为:

=Sheet1$A$2:INDIRECT("$A$" & ROW())

唯一ID列包含CF公式的以下部分:

=Fixed(SUMPRODUCT(1/COUNTIF(CurrentRange,CurrentRange)))

从第3行开始,您可以看到&#34; Color&#34;中该行及以上的唯一值的计数。如果公式最终遇到第3个唯一值,则列为2并且在每个后续行中保持2,直到第6行为止。

Band列使用公式的其余部分引用B列=MOD(B2,2)中的结果,以显示它如何将您带到可以用于CF的1和0。

最后,重点是,您不需要额外的列。整个公式可以在CF规则+命名范围中使用。对我来说,这意味着我可以将基本公式放在我用来删除数据的模板中,而不必担心一旦数据被丢入就会搞乱额外的列。它只是默认工作。此外,如果您需要考虑空白或其他复杂性或大型数据集,您可以使用频率和匹配函数使用其他更复杂的公式。

希望这可以帮助别人避免多年来的挫败感!

答案 9 :(得分:0)

您可以使用此公式来完成工作 - &gt;通过键入以下内容获取特定行的CellValue:     =间接(“$ A&amp; Cell()),具体取决于您需要检查的列,您必须更改 $ A

例如 - &gt;您可以在后台使用自定义的VBA功能:

Public Function IstDatum(Zelle)As Boolean    IstDatum =假    如果IsDate(Zelle)那么IstDatum = True 结束功能

我需要它来检查A列中的日期条目:

= IstDatum(INDIREKT( “$ A” &安培; ZEILE()))

have a look at the picture:

答案 10 :(得分:0)

A simpler version of one of the above answers. Column A is the key.
Yes, it needs a helper column.  That's column K.
1) Set first cell in table to TRUE (K8)
2) On second row at K9, and to end of table (K99), paste: =IF(A8=A9,K8,NOT(K8))
This gives a pattern of TRUE...TRUE, FALSE...FALSE,...
3) Select key column A1:A99, or whole table A1:K99
4) Set Home/Conditional/New Rule/Formula  =K8
5) Format as you wish for the TRUE cells
6) Select the range from (3) and Right-click Format White (or whatever
background color you want) for the FALSE cells

Note that this solution (and the others) have a major flaw, in that this
highlighting doesn't work properly when you have filters active in your
table.  I want that fix :)