查找并突出显示可变范围中的最不常见的事件

时间:2015-06-24 14:31:56

标签: excel vba excel-vba search find-occurrences

我的代码具有可变范围,每列中有许多类别用于显示数据。我需要将最不常见的值突出显示为细胞总数的百分比。

如果列中有300个单元格,则需要找到最不频繁发生的值(在许多可能重复的值中)。如果代码可以预测总数,那么这是一个奖励,因此只给出整个列的5%或10%。

目前我的尝试是在顶部单元格中使用一个函数,该函数将找到最不常见的事件,并且代码将简单地突出显示重复的单元格中的任何值(并突出显示每个最不常见的值)。

我遇到的困难是双重的。

  1. 可能有多个最不常见的值仍然低于总值的10%
  2. 自动执行此搜索的功能,以便可以针对每列中包含不同类别和不同值的100多个列执行和突出显示该搜索
  3. 如果过于含糊,可以随意询问我的目标,我会及时回复。

    这就是数据的样子。正如您所看到的,每个列都有合并的标题,其中包含各种空格以及与某些特定列匹配的精确放置的数据。 enter image description here

    这是建议的代码,但仍然没有突出我想要的内容。它有两个问题。 1:如果行中没有不同的值,它将突出显示一个范围内的所有数据。 2:它将突出显示列的标题。 enter image description here

    这是突出显示的数据,但仍然不够完整。 enter image description here

    在某些情况下,列实际上与代码的目的不匹配,例如在一列中,数字12在列中突出显示(67次出现),其中出现的其他数字较少。 (8次出现29次,未突出显示)

1 个答案:

答案 0 :(得分:1)

我只是把一个看似有效的例子一起砍掉了。试试这里:

Sub frequenz()
Dim col As Range, cel As Range
Dim letter As String
Dim lookFor As String
Dim frequency As Long, totalRows As Long
Dim relFrequency As Double
Dim ran As Range

ran = ActiveSheet.Range("A1:ZZ65535")
totalRows = 65535

For Each col In ran.Columns
    '***get column letter***
    letter = Split(ActiveSheet.Cells(1, col.Column).Address, "$")(1)
    '*******
    For Each cel In col.Cells
        lookFor = cel.Text
        frequency = Application.WorksheetFunction.CountIf(Range(letter & "2:" & letter & totalRows), lookFor)
        relFrequency = frequency / totalRows

        If relFrequency <= 0.001 Then
            cel.Interior.Color = ColorConstants.vbYellow
        End If
    Next cel

Next col

End Sub

它似乎正在做你正在寻找的东西。

修改:修复了地址获取。