セルを色でカウントし、結合されたセルを1つ以上としてカウントしないExcelマクロ

セルを色でカウントし、結合されたセルを1つ以上としてカウントしないExcelマクロ

結合されたセルのグループ内の個々のセルをカウントせずに、セルの範囲を調べて色ごとに内容をカウントするマクロを作成するにはどうすればよいでしょうか。ここに画像の説明を入力してください

たとえば、図では、マクロで黄色 2 個と緑色 3 個のカウントを返すようにしたいのですが、私が作成したマクロは、結合された黄色のセル 7 個を個別にカウントしているため、黄色のカウント 8 個を返します。

答え1

うーん。このサンプルには、意味を伝えるためにセルを色分けすることと、セルを結合することという、避けるべき悪い習慣が 2 つあります。絶対にしないでください。別の列を使用してステータスまたはカテゴリの値を決定すると、条件付き書式を使用して、そのステータスまたはカテゴリの値に基づいてセルの色を設定できます。また、簡単なワークシートの数式を使用して、ステータスまたはカテゴリごとにカウントを実行することもできます。

セルを結合すると、アスピリンよりも頭痛がします。セルを結合しないでください。選択に問題が生じ、お気づきのように VBA のロジックにも問題が発生します。結合せずに、ワークシートの数式で単純にカウントしてください。セルを結合する「必要性」は、適切なデータ アーキテクチャとワークシート構造によって常に克服できます。

答え2

私は完全に同意しますテイリンの警告ですが、そのような解決策に正当な理由がある場合は、たとえば次のような関数を使用できます。

Function ColorCount(rng As Range, pat) As Long
    Dim cell As Range, cnt As Long
    Select Case TypeName(pat)
        Case "Range": pat = pat.Interior.Color
        Case "String": pat = Range(pat).Interior.Color
    End Select
    For Each cell In rng
        If cell.Address = cell.MergeArea(1).Address And _
            cell.Interior.Color = pat Then
            cnt = cnt + 1
        End If
    Next cell
    ColorCount = cnt
End Function

この関数は 2 つの引数を取ります。1 つ目はチェックするセルの範囲、2 つ目はカラー パターン (参照、アドレス テキスト、または数値カラー値) です。セルの色は条件付きではなく、基本書式から取得されます。

色数

関連情報