我有一个大约有 300 行的电子表格。每行大约有 15 列,每个单元格包含一个数值。每行对应一个产品。
我想让 Excel 针对每种产品突出显示数字最高的单元格(红色),数字最低的单元格(黄色),中间的数字为渐变色。如果我选择一行(具体来说,是包含我的数据的行中的 15 个单元格),然后单击条件格式 > 颜色标度 > 红黄色标度,就会发生这种情况。
但是,我有 300 行,单独选择每一行并设置条件格式会花费太长时间。另一方面,如果我选择整个范围并应用条件格式,Excel 会根据整个范围计算颜色,而实际上我希望逐行计算颜色。例如,以下示例数据:
1 2 3
4 5 6
7 8 9
我想要的输出是,使用 Y 代表黄色、O 代表橙色、R 代表红色:
Y O R
Y O R
Y O R
但是,如果我选择整个范围并应用条件格式,我会得到:
Y Y Y
O O O
R R R
有没有办法实现这一点,而不用一次执行一行?
答案1
这是一个宏,它为您选择的每一行创建条件格式。它通过将第一行的格式复制到所选中的每一行(逐行复制,而不是全部复制)来实现此目的。替换B1:P1参考数据表的第一行。
Sub NewCF()
Range("B1:P1").Copy
For Each r In Selection.Rows
r.PasteSpecial (xlPasteFormats)
Next r
Application.CutCopyMode = False
End Sub
要使用,请突出显示数据集中未格式化的行(在我的情况下,B2:P300),然后运行宏。在下面的示例中,请注意前两行中的最大数字是5和15,两个细胞都是深红。
但我确信有比这更快的解决方案。
答案2
实现此目的的最简单方法是逐步复制/粘贴。首先,按您想要的方式格式化第一行。然后仅将格式复制并粘贴到第二行。现在复制第 1 行和第 2 行,并将格式粘贴到第 3 行和第 4 行。重复上述步骤,复制 4,粘贴 4,复制 8,粘贴 8,复制 16,粘贴 16。一旦您获得了像 16 这样合适的数量,请粘贴几次以达到 64 或 128。然后您可以复制这些并粘贴它们的格式,这样您就可以比以前覆盖更多的领域。
它并不优雅,并且根据我的经验,有条件地格式化饮食行所需的资源开始达到最大值约 2500 行......但它完成了工作。
我只是希望有逻辑不会为每一行创建单独的条件格式,浪费资源......
答案3
您还可以将条件格式应用于一行。再次突出显示该行并双击“格式刷”以将其锁定。使用向下箭头键将条件应用于其他行。
因为我的公司通常会阻止 Excel 中的宏,所以这对我来说很有用。希望它也能帮助你。
答案4
我想提供一个更新的代码,使其更易于操作。这只是对@Ellesa 的答案的编辑。
Sub RowConditionalFormatting()
Selection.Copy
For Each r In Selection.Resize(Selection.End(xlDown).Row - Selection.Row + 1, Selection.Columns.Count).Rows
r.PasteSpecial (xlPasteFormats)
Next r
Application.CutCopyMode = False
End Sub
只需使用条件格式突出显示表格的第一行并运行此宏即可。它会将其一直复制到表格底部。
这只是避免每次需要运行宏时都必须更新它。