0

データを表示する各列に多くのカテゴリを持つ可変範囲を持つコードがあります。セルの総数のパーセンテージとして、最も一般的に発生しない値を強調表示する必要があります。

列に 300 個のセルがある場合、(繰り返される可能性のある多くの値の中から) 発生頻度が最も低い値を見つける必要があります。コードが合計数を予測でき、結果として列全体の 5% または 10% しか得られない場合はボーナスです。

現在、私の試みは、最も一般的でないオカレンスを見つける一番上のセルで関数を使用することです.コードは、セルが繰り返されるときにその値が何であれ単純に強調表示します(そして、最も一般的でないもののすべてを強調表示します.

私が抱えている困難は2つあります。

  1. 合計値の 10% をまだ下回っている複数の最小値が存在する可能性があります。
  2. この検索を自動化して、各列に異なるカテゴリと異なる値を持つ 100 を超えるすべての列に対して実行および強調表示できるようにする機能

漠然としすぎている場合は、私が何をしようとしているのかについて気軽に質問してください。迅速に対応します.

これがデータの外観です。ご覧のとおり、各列のタイトルがマージされ、さまざまな空白スペースと、特定の列に一致するデータが不規則に配置されています。 ここに画像の説明を入力

これは私が望むものをまだ強調していない提案されたコードです。これには 2 つの問題があります。1: 行に異なる値がない場合、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 に答える