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

Find and Highlight Least Common Occurrence(s) in Variable Range

我有一个代码,它有一个可变范围,在显示数据的每一列中有许多类别。我需要突出显示最不常出现的值占单元格总数的百分比。

如果列中有 300 个单元格,它需要找到出现频率最低的值(在许多可能重复的值中)。如果代码可以预测总数,并且结果只给出整个列的 5% 或 10%,那将是一个奖励。

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

我遇到的困难是双重的。

  1. 可能有不止一个最不常见的值仍然低于总值的 10%
  2. 能够自动执行此搜索,以便可以针对 100 多个具有不同类别和每列中不同值的列执行和突出显示

如果太模糊,请随时询问我的目的,我会及时回复。

这是数据的样子。如您所见,每列都有合并的标题,其中包含各种空格和与某些特定列匹配的分散放置的数据。

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

这是突出显示的数据,仍然不够完整。

在某些情况下,该列确实与代码的用途不符,例如在一列中,数字 12 在该列下方突出显示(出现 67 次),而其他数字的出现次数较少。 (8出现了29次,没有高亮显示)

我刚刚整理了一个看似可行的示例。在这里试试这个:

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

它似乎正是您正在寻找的东西。

编辑:修复了地址获取问题。