プロが教えるわが家の防犯対策術!

VBA初心者です。
VBAで行単位で条件付き書式の色をカウントしたいです。
大量のデータがあるExcelで多数の条件付き書式で色を塗りつぶしています。
またもともと行単位で条件付き書式とは別に色分けしている部分もあります。
その中で条件付き書式で色塗りされたセルだけを行単位で数をカウントするマクロを作りたいのですが、どうも上手くできません。以下が今作ってるマクロです。どなたかわかる方はいますでしょうか?
よろしくお願いします。

Dim taishoRow As Range
Dim Rng As Range
Dim cnt As Long
On Error Resume Next
Set taishoRow = Application.InputBox("対象行を選択","行取得",,Type:=8)
For Each Rng In taishoRow
If Rng.FormatConditions.Count <> 0 Then
If Rng.DisplayFormat.Interior.ColorIndex <> xLNone Then
cnt = cnt + 1
End If
End If
Next Rng
MsgBox cnt
End sub

A 回答 (3件)

こんにちは


少し問題要素は残りますが、条件を充たした時に ユーザーがあらかじめ設定しているセル色と同じにしない・・と言う事が前提であれば
条件部分を
If Rng.FormatConditions.Count <> 0 Then
If Rng.DisplayFormat.Interior.ColorIndex <> xlNone _
And Rng.DisplayFormat.Interior.ColorIndex <> Rng.Interior.ColorIndex Then
cnt = cnt + 1
End If
End If
のように 加えると 条件を充たしていないがあらかじめ設定されているセル色を除外できると思います。
    • good
    • 1
この回答へのお礼

助かりました

ありがとうございます。
やってみたらそれらしい結果がでました。
ただあらかじめ設定しているセル色と同じにしないというのが引っかかります。
条件付き書式で色は同じでも書式を変えてるのもあるので。。。

お礼日時:2022/06/08 10:38

>条件付き書式の色をカウントしたいです。


>条件付き書式で色は同じでも書式を変えてるのもあるので。。。

これ、矛盾していませんか?

条件付き書式を充たしているセルを数えたいと言う事?
だとすると、かなり難しい(面倒)・・

プロパティに条件のTrue/Flaseを返すのが無かったと記憶しているので
設定されているすべての条件を調べて、かつ条件が充たされているか否かを調べる必要がありそうですね・・・
同じセルに複数の条件設定が出来るのと書式設定も多岐にわたる事を考えると申し訳ないのですが萎えます。
どこかに条件付き書式のファンクション、メソッド無いかな・・?
    • good
    • 1
この回答へのお礼

ありがとう

コメントありがとうございます。
自分自身もかなり難しいと思って質問しました。
ただ今回は色で判断するだけでも良いと思うので、前にご回答いただいたコメントでなんとかなりそうです。
ご丁寧にありがとうございます。

お礼日時:2022/06/08 11:26

こんにちは



>どうも上手くできません。
どこが、意図と異なるのでしょうか?


よくわからないのですが、文書等では「行単位で条件付き書式の色をカウント」と書いてありますが、実際に行っているのは入力セル範囲のセルのチェックです。

入力者が行を選択すれば、当然行が対象となりますが、セルを選択することも可能なので、その際にどう対処するのでしょうか?
入力されたセルのみをチェック対象とするのなら、ご提示のままで問題ないと思います。
ただし、入力者が行全体を選択した場合、不要な非使用のセルのチェックまで行ってしまいますので、
 Intersect(ActiveSheet.UsedRange, taishoRow)
とすることで、不要部分を省くことが可能と思います。

1セル(またはいくつかのセル)が入力されても、その行全体を対象とするのなら、範囲を
 Intersect(ActiveSheet.UsedRange, taishoRow.EntireRow)
に広げる必要があるのかも知れません。


カウントの処理として、「条件付き書式が設定されているセル」をカウントなさりたいのではなく、「条件付き書式で色を変えて表示されているセル」をカウントしたいのではないかと推測しますが・・
もしそうであるなら、
>If Rng.DisplayFormat.Interior.ColorIndex <> xLNone Then
では、「無色ではないセル」の数をカウントしていることになります。

比較するのは、「実際の表示色」と「セルに設定されている色」で、これが異なれば条件付き書式により色が変わっているものと判断するということではないのでしょうか?
その場合であれば・・
 If Rng.DisplayFormat.Interior.Color <> Rng.Interior.Color Then
ではないのかと。
ColorIndexはエクセルのカラーテーブルのindexになります。
自由な色設定も考慮しておくのなら、Color(=RGBカラー)で比較する方が宜しそうに思います。
    • good
    • 1
この回答へのお礼

ありがとう

>>どうも上手くできません。
>どこが、意図と異なるのでしょうか?
行単位で処理をすると条件付き書式で変わった色だけではなく色付きのセルを全て返してきてました。

おっしゃる通りの
If Rng.DisplayFormat.Interior.Color <> Rng.Interior.Color Then
を前の回答者の方に教えていただき解決しそうです。
ありがとうございます。

お礼日時:2022/06/08 11:20

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

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


このQ&Aを見た人がよく見るQ&A