Excel – 根据值的变化对整行进行着色
我想根据一个单元格的值在Excel中遮盖整行。 例如说我有以下几行:
**File No** 1122 1122 1144 1155 1155 1155 1166
我想要前两行(文件#的值是1122)以颜色1,下一行(其中文件#的值为1144)被着色为2,后面的3行(其中文件#的值是1155)是阴影颜色1,下一行(其中文件#的值是1166)是阴影颜色2
你可以做的是在你的电子表格的右侧创build一个新的列,你将使用它来计算一个你可以基于你的阴影的值。
假设你的新列是D列,而你想要查看的值在第2列的第A列。
在单元格D2中放入:= MOD(IF(ROW()= 2,0,IF(A2 = A1,D1,D1 + 1)),2)
根据需要将其填满,(如果需要,可以隐藏列)。
现在突出显示您的整个数据集 – 这个单元格的select将在下一步中被遮蔽。
在“ 主页”选项卡上,单击“ 条件格式” ,然后单击“ 新build规则” 。
select使用公式来确定要格式化的单元格 。
在“此公式为真的格式值”中input= $ D2 = 1
单击格式button,单击填充选项卡,然后select您要阴影的颜色。
这里的例子:
如果您使用MS Excel 2007,则可以使用“ Home
选项卡上的conditional formatting
,如下面的截图所示。 您可以使用color scales
默认选项,因为我已经在这里完成了,或者您可以继续,并根据您的数据集创build一个new rule
。
使用条件格式 。
最简单的forms就是说“对于这个单元格,如果它的值是X,那么应用格式foo”。 但是,如果使用“公式”方法,则可以select整行,input公式和相关格式,然后对表格的其余部分使用复制和粘贴(仅格式)。
在Excel 2003或更高版本中,只能使用3个规则,因此您可能需要为颜色定义模式,而不是使用原始值。 像这样的东西应该工作,虽然:
这个问题困扰了我很多年。 不要喜欢创build一个额外的(不相关的)行/列来计算格式的想法。 最后想出了以下规则:
=INDIRECT("A"&ROW())<>INDIRECT("A"&(ROW()-1))
这为第2行创build了参考A2<>A1
,第3行创build了A2<>A1
A3<>A2
。将字母“A”调整为您想要比较的列
我已经find了一个简单的解决scheme,通过Pearson Software Consulting的内容进行绑定:假设表头是从A1到B1,表格数据是从A2到B5,控制单元位于A列
- 做一个新的专栏,C
- 首先在C2单元格中使第一行的公式= true
- 在第二行中,使公式= IF(A3 = A2,C2,NOT(C2))
- 将列填充到最后一行
- select数据范围
- select条件格式,select使用公式…并将= C2作为公式
在MS Excel中,首先将工作簿保存为启用macros的文件,然后转到“开发者”选项卡并单击Visual Basic。 将此代码复制并粘贴到“ThisWorkbook”Excel对象中。 将G =和C =的2个值replace为包含被引用值的列的编号。
在你的情况下,如果名为“File No”的列号是第一列(即第一列),用G=6
1replaceG=6
,用C-1
replaceC=6
。 最后点击macros,select并运行它。 瞧! 奇迹般有效。
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
至less和另外一个贡献者一样,我也从来不喜欢添加一个额外的“帮手”专栏,这可能会在各种情况下造成一些麻烦。 我终于find了解决办法。 有几个不同的公式,您可以根据需要和列中的内容使用,是否有空白值等等。对于我的大部分需求,我已经着手使用以下CF公式的简单公式:
= MOD(固定(SUMPRODUCT(1 / COUNTIF(CurrentRange,CurrentRange))),2)= 0
我使用以下公式创build一个名为“CurrentRange”的命名范围,其中[Sheet]是您的数据结果所在的工作表,[DC]是具有您希望为其绑定数据的值的列,[FR]是第一个行中的数据在:
= [Sheet]!$ [DC] $ [FR]:INDIRECT(“$ [DC] $”&ROW())
工作表参考和列参考将基于具有您正在评估的值的列。 注:您必须在公式中使用命名范围,因为如果您尝试直接在CF规则公式中使用范围引用将会引发错误。
基本上,该公式的工作原理是对每一行评估该行及其以上的所有唯一值的计数。 每行的这个值基本上为每个新的唯一值提供了一个递增的唯一ID。 然后,在简单交替行颜色(即= Mod(Row(),2)= 0))的标准CF MOD函数公式中,在Row()函数的位置使用该值。
请参阅下面的示例,将公式分解为在列中显示结果组件,以显示它在幕后执行的操作。
示例数据
在这个例子中,CurrentRange命名的范围被定义为:
= Sheet1 $ A $ 2:INDIRECT(“$ A $”&ROW())
唯一ID列包含CF公式的公式的以下部分:
=固定(SUMPRODUCT(1 / COUNTIF(CurrentRange,CurrentRange)))
您可以看到,从第3行开始,“Color”列中该行和上面的唯一值的计数为2,并且在后续行中保持2,直到公式最后遇到第3个唯一值时的第6行。
Band列使用公式的其余部分引用列B = MOD(B2,2)中的结果来显示如何使您获得可以用于CF的1和0。
最后,重点是,你不需要额外的列。 整个公式可以用在CF规则+有名范围中。 对我来说,这意味着我可以将基本公式粘贴到用于放入数据的模板中,而不必担心一旦数据被放入,就会混淆额外的列。它只是默认工作。 此外,如果您需要考虑空白或其他复杂性或大量数据,则可以使用其他更复杂的使用频率和匹配function的公式。
希望这可以帮助别人避免多年来的挫折!
我必须为我的用户做一些类似的事情,用一个小的变体,他们希望有一个运行号码分组类似的项目。 以为我会在这里分享。
- 创build一个新的列A
- 假设第一行数据在第二行(第一行是标题),在A2中放置
1
- 假设你的文件号是在B列,在第二行(在这种情况下是A3),使公式
=IF(B3=B2,A2,A2+1)
- 填充/复制粘贴单元格A3到最后一行(小心不要复制A2意外;这将填充所有单元格1)
- select数据范围
- 在“ 主页”function区中,select“ 条件格式” – >“ 新build规则”
- select使用公式来确定要格式化的单元格
- 在公式单元格中,将
=MOD($A1, 2)=1
作为公式 - 点击格式 ,select填充标签
- select所需的背景颜色,然后单击确定
- 点击OK
你可以使用这个公式来完成这个工作 – >通过input: = indirect(“$ A&Cell())来获取特定行的CellValue,这取决于你必须检查哪一列,你必须改变$ A
例如 – >您可以在后台使用自定义的VBAfunction:
公共函数IstDatum(Zelle)作为布尔IstDatum = False如果IsDate(Zelle)然后IstDatum = True结束function
我需要它来检查列A中的date条目:
= IstDatum(INDIREKT( “$ A” &ZEILE()))
看看图片:
我讨厌使用这些单元格内部公式,而不得不填写一个新的列,并且我最终学会了通过自己的VBAmacros来实现这个效果。
这可能不是与其他答案在逻辑上有所不同,但我认为代码看起来好多了:
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;我还没有发现一个简单的方法来获得这个)。
首先,只要值更改为新值(使用“偏移量”来检查上面的单元格),布尔variables就会交替进行检查,并且每次检查行都检查True或False,然后相应地对其进行着色。