アプリ版:「スタンプのみでお礼する」機能のリリースについて

昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカウントできる、VBAコードを教えて下さい。セルの範囲は、H8:W40です。』で、さらに、その数をセルA1に自動表示させるコードを教えてください。
(色が変わるたびに数字も変わるようにしたい。)
よろしくお願いします。

A 回答 (4件)

こんにちは


昨日回答したものです。
>色が変わるたびに数字も変わるようにしたい。
自動でとなると
シートイベント Private Sub Worksheet_Calculate() となるかと

DisplayFormat プロパティ 条件書式のセルの色を取得するプロパティは
Displayとあるように少し限定されたプロパティで読み取り専用で且つ
ユーザー 定義関数からの実行が出来ません。。たしか

Private Sub Worksheet_Calculate()
Dim r As Range
Dim n As Integer: n = 0
Dim n1 As Integer: n1 = 0
For Each r In Range("H8:W40")
If r.DisplayFormat.Interior.ColorIndex <> -4142 Then n = n + 1
If r.Interior.ColorIndex <> -4142 Then n1 = n1 + 1
Next
Range("A1") = n - n1
End Sub

条件書式が設定されたセルは参照式で値を取得している必要があります
直接入力の場合は、計算されません。。
他のセルで計算が行われれば、実行されます。
Worksheet_Calculateについては少し調べた方が良いかも知れません。
計算の度に実行されるので、余計な負担が生じます。

少しだけ重要な認識を
昨日のものは参考コードですので詳細を説明していませんでしたが

If r.DisplayFormat.Interior.ColorIndex <> -4142 Then n = n + 1
If r.Interior.ColorIndex <> -4142 Then n1 = n1 + 1

上は 条件書式で付けられた or 通常書式設定で設定したセルの色を設定されているか比較して変数nをカウントアップしています

下はセルに色がついているかを比較して変数n1をカウントアップしています

条件書式でのセル背景色設定はセルの元のセル色を内部的に維持をして
色を変えていますので ・・分かりにくいかも知れません。

言い方を変えて、
対象範囲すべてのセル色をあらかじめ色を付けておくと
n1は条件書式設定で色が変わっていても 対象範囲のセルの数になります
DisplayFormatも 条件書式で付けられた or 通常書式設定 なので
対象範囲のセルの数になります。したがってRange("A1") = n - n1は0です
(ここが注意する点)

私は、条件書式設定で設定されたセルの色の取得方法は
DisplayFormat.Interior.Color・・・ しか知りません。

対象範囲に通常書式設定のセル背景色を設定する場合は留意してください。
    • good
    • 1

ユーザー定義関数:



Option Explicit

Public Function CountColor(Area As Range) As Long
    Application.Volatile
    Dim Cell As Range
    For Each Cell In Area
        If Evaluate("ColorIndex(" & Cell.Address & ")") <> -4142 Then
            CountColor = CountColor + 1
        End If
    Next Cell
End Function

Private Function ColorIndex(Cell As Range) As Long
    ColorIndex = Cell.DisplayFormat.Interior.ColorIndex
End Function
    • good
    • 2
この回答へのお礼

いつもありがとうございます。
助かっています。^ - ^

お礼日時:2022/04/07 19:08

No1です。



連投失礼。

単に、ユーザ定義関数にするだけだと「色の変更」だけでは再計算されないので、Volatile にしておく必要がありそうですね。
失礼いたしました。

https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 1
この回答へのお礼

ありがとうございます。
非常に助かりました。^ - ^

お礼日時:2022/04/07 19:07

こんにちは



VBAを、結果の数値を返すユーザ定義関数(Function 〇〇)にしておいて、A1セルに
 =〇〇()
と入力しておけば宜しいでしょう。
    • good
    • 1

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

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