0

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

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

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

我遇到的困难是双重的。

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

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

这就是数据的样子。正如您所看到的,每列都有合并的标题,其中包含各种空格和与某些特定列匹配的不规则放置的数据。 在此处输入图像描述

这是建议的代码,它仍然没有突出我想要的内容。它有两个问题。1:如果行中没有不同的值,它将突出显示一个范围内的所有数据。2:它将突出显示列的标题。 在此处输入图像描述

这是突出显示的数据,但仍然不够完整。 在此处输入图像描述

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

4

1 回答 1

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

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

编辑:固定地址获取。

于 2015-06-24T16:06:08.530 回答