【问题标题】:Conditional Formatting - highlight "Top 3" - Problem with duplicates条件格式 - 突出显示“前 3 名” - 重复问题
【发布时间】:2019-10-20 23:54:00
【问题描述】:

我在一列中有一组数据(数字)。我想要实现的是突出显示(直接在本专栏中)前 3 个值。如果没有重复,它工作正常,但如果有,我得到错误的结果(重复被视为唯一值)。

我写了一个简单的函数(请看下面),但是它并不能正常工作。

Function isTop(cellTop As Range, rngTop As Range, noTop As Integer) As Boolean

'cellTop - cell to be checked
'rngTop - range to be considered
'noTop - nth top value

Dim iStartTop As Integer, noOccurTop As Integer, noTopUpdate As Integer

    For iStartTop = 1 To noTop

        If cellTop.Value = Application.WorksheetFunction.Large(rngTop, iStartTop) Then
            isTop = True
            Exit Function
        End If

    Next iStartTop

End Function

假设 A 列中有以下一组数据(12 个元素):

1
2
3
4
1
2
3
4
1
2
3
4

我想突出显示前 3 个元素(通过使用条件格式和标准的前 3 个条件或函数 =isTop(A1,A:A,3))。应用任何提供的方法后,只会突出显示包含“4”的单元格。

但是,我希望突出显示“4”、“3”和“2”。如果给定列中存在重复项,有没有办法解决这个问题?

提前感谢您的帮助。 最好的祝福, 卡米尔

【问题讨论】:

  • 您是否希望突出显示所有具有 4、3 和 2 的值?还是只是前 4、3 和 2 个?
  • 是的,所有值都应该突出显示(3 x "4"、3 x "3" 和 3 x "2"),这就是问题所在。

标签: excel vba excel-formula conditional-formatting


【解决方案1】:

所以这里有一种方法可以做你想做的事:

创建三个新的条件格式规则:

  1. 应用到范围$A:$A

    =$A1=MAX($A$1:$A$12)
    
  2. 应用于范围$A:$A

    =$A1=LARGE(($A$1:$A$12<MAX($A$1:$A$12))*($A$1:$A$12),1)
    
  3. 应用于范围$A:$A

    =$A1=LARGE(($A$1:$A$12<LARGE(($A$1:$A$12<MAX($A$1:$A$12))*($A$1:$A$12),1))*($A$1:$A$12),1)
    

你也可以走 VBA 路线,但这取决于你。

【讨论】:

  • 哇。非常感谢您的快速回答和好主意。我等不及要测试它了。再次感谢!
  • 别担心,告诉我进展如何
  • 效果很好!谢谢你。我还有一个问题:有没有办法让它更有活力?何时根据行数确定顶部值的数量?就我而言,有一个阈值(有时要突出显示前 3 或 5 或 10 个)。有没有办法将它作为函数中的参数传递?如果没有重复,“LARGE”功能可以正常工作,但如果有,则突出显示的单元格列表不完整。我正在考虑在 VBA 中使用一个数组来存储唯一(顶部)值,然后在循环中检查整个范围,但也许有更复杂的方法?
  • @Cammil,我不确定是否可以通过条件格式使用动态范围和动态最大值。如果您决定采用 VBA 路线,则填充背景与将条件格式应用于单元格不同。请注意这一点,我相信这不会太难。在这种情况下,VBA 可能就足够优雅了 :)
  • 再次感谢您的快速回答。嗯,这就是我害怕的。所以,我需要放弃使用条件格式的想法。那让我试试VBA吧。尽管如此,你提供的 3 个公式的“诀窍”我肯定会在未来使用。再次感谢?
猜你喜欢
  • 2016-09-07
  • 1970-01-01
  • 2016-02-21
  • 2016-05-07
  • 1970-01-01
  • 2018-10-06
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多