プロが教える店舗&オフィスのセキュリティ対策術

Excelで条件付きの書式と手動で色を付けました。

色が付いているセルの数を数える関数を入れるやり方を教えて下さい。

色は3色使いましたが、各色での数ではなく3色すべての数を求めたいです。
ご教授お願いいたします。

A 回答 (4件)

残念ながら、No.1さんの示されたURLでの解説されているVBAではDisplayFormatプロパティを使用していないため、また、No.2さんの回答にある「4.0マクロ関数」ではセル自身の背景色を判別するため、いずれも「条件付き書式」による色付けを判別できない気がします。


つまり、「条件付き書式」による色付けを含めて判別するにはDisplayFormatプロパティを用いるということになるのですが、DisplayFormatプロパティは、普通の方法ではVBAの仕様により、「プロシージャでは使えるが、ユーザー定義関数の中では使用できない」と聞いています。
従って、No.3さんの方法も結果的にNGということになるのではないかと思います。

ということで、
No.3さんのVBAを修正して、

Function ColorCount(Targetrng As Range) As Long
Dim Rng As Range
Dim i As Long
Application.Volatile
i = 0
For Each Rng In Targetrng
If Evaluate("PeekColor(" & Rng.Address & ")") <> RGB(255, 255, 255) Then '無理やり文字列を生成してからEvaluateでユーザー定義関数「PeekColor」を計算させる。DisplayFormatユーザー関数内使用制限を回避。
Debug.Print Rng.Address(0, 0)
'Debug.Print Rng.DisplayFormat.Interior.Color 'この行をコメントアウトしないと#Value!が返る。普通の方法ではDisplayFormatはユーザー定義関数の中では使用できないという証左?
i = i + 1
End If
Next
Debug.Print i
ColorCount = i
End Function

Function PeekColor(Rng As Range) As Long
PeekColor = Rng.DisplayFormat.Interior.Color
Debug.Print PeekColor
End Function

というVBAを標準モジュールとして記述し、色の付いたセル数のカウントを表示したいセルに「=ColorCount(A1:G20)」のように、
=ColorCount(対象範囲)
という数式を記述すれば、そこに対象範囲の色の付いたセル数が表示されるはずです。
    • good
    • 0
この回答へのお礼

出来ました。
わかりやすいご説明ありがとうございました。
大変助かりました。

お礼日時:2021/11/04 10:37

どういう使い方をするか不明だったので、どっちに転んでも何とかなるように。



Function ColorCount()
Dim rng As Range
Dim i As Long
For Each rng In Selection
If rng.DisplayFormat.Interior.Color <> RGB(255, 255, 255) Then
Debug.Print rng.Address(0, 0), rng.DisplayFormat.Interior.Color
i = i + 1
End If
Next
Debug.Print i
ColorCount = i
End Function
    • good
    • 0

Excelには、塗りつぶしなどの書式をカウントする関数はありません。



№1さんがご紹介のリンク先での方法以外には4.0マクロ関数を使う方法などがあります。
http://miyahorinn.fc2web.com/faq/faq030.html
    • good
    • 0

https://pasokon-labo.com/excel-count-colored-cell/
これでどうでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています