[[20180119164500]] 『条件付き書式で色付けた個数を数えたい』(ぴょこたん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件付き書式で色付けた個数を数えたい』(ぴょこたん)

よろしくお願いします。

条件付き書式で1つのセルに対して16個ほど条件が入っています。
それによって赤と青に色付けがされるようにしました。

赤が何個、青が何個あるかを数えたいです。
セルは連続していなくてA1,A3,A5,A6・・と横一列ではありますがとびとびです。

=COUNTCOLORというやつで出来そうかと思ったのですが
どうやらこれは条件付き書式での色付けには対応していないようで困っています。

カウントする方法があれば教えてください。


色をカウントする方法がなければ、
色付けした条件と同じものを満たした場合横のセルに「1」と表示させ
それを合計すればいいのかな?とも考えました。
ただ、この場合条件付き書式に入れた条件16個をどのように1つに表現すればいいのかが分からずにちょっと思考停止しました・・・。

ちなみに入っている条件書式は下記通りです。

=AL10=1→色づけしない

=AK10=1→色づけしない

=AT10=1→色づけしない

=AP10=0→色づけしない(上記4つの場合は色付けせずに終了)

=AND(LEFT($A10,4)="0501",AQ10>=AQ$5)→青

=AND(LEFT($A10,4)="0908",AQ10>=AQ$6)→青

=AND(LEFT($A10,4)="1405",AQ10>=AQ$7)→青

=AND(LEFT($A10,4)="1608",AQ10>=AQ$8)→青

=AND(LEFT($A10,4)="1908",AQ10>=AQ$9)→青

=AP10>=AQ$4→青

=AND(LEFT($A10,4)="1908",AP10<=AP$9)→赤

=AND(LEFT($A10,4)="1608",AP10<=AP$8)→赤

=AND(LEFT($A10,4)="1405",AP10<=AP$7)→赤

=AND(LEFT($A10,4)="0908",AP10<=AP$6)→赤

=AND(LEFT($A10,4)="0501",AP10<=AP$5)→赤

=AP10<=AP$4→赤


エクセル初心者ですので、的外れな質問をしていたらすみません。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


作業列を使っていいのであれば、条件付き書式に記述した数式を、作業列にも記述してやって、その結果に対してCOUNTIF関数使うってのは駄目ですか?
(もこな2) 2018/01/19(金) 18:01

もこな2さん

お返事ありがとうございます!
作業列を作成するのは問題ありません。

上記の条件付き書式に記述した数式を1つの作業列に全部いれるということでしょうか・・?
どのような式にすれば全部成立するのか教えていただきたいです・・・。

(ぴょこたん) 2018/01/22(月) 09:39


↑すみません、作業列1つでは無理でした。
赤と青でカウントを別にしたいです。

改めて・・・

【青の作業列】
=AL10=1→0を表示
=AK10=1→0を表示
=AT10=1→0を表示
=AP10=0→0を表示
(上記4つの場合は今後下の条件に当てはまっても0)
=AND(LEFT($A10,4)="0501",AQ10>=AQ$5)→1を表示
=AND(LEFT($A10,4)="0908",AQ10>=AQ$6)→1を表示
=AND(LEFT($A10,4)="1405",AQ10>=AQ$7)→1を表示
=AND(LEFT($A10,4)="1608",AQ10>=AQ$8)→1を表示
=AND(LEFT($A10,4)="1908",AQ10>=AQ$9)→1を表示
=AP10>=AQ$4→1を表示

【赤の作業列】
=AL10=1→0を表示
=AK10=1→0を表示
=AT10=1→0を表示
=AP10=0→0を表示
(上記4つの場合は今後下の条件に当てはまっても0)
=AND(LEFT($A10,4)="1908",AP10<=AP$9)→1を表示
=AND(LEFT($A10,4)="1608",AP10<=AP$8)→1を表示
=AND(LEFT($A10,4)="1405",AP10<=AP$7)→1を表示
=AND(LEFT($A10,4)="0908",AP10<=AP$6)→1を表示
=AND(LEFT($A10,4)="0501",AP10<=AP$5)→1を表示
=AP10<=AP$4→1を表示

この式をまとめたいです。
さっぱりわかりません・・・

(ぴょこたん) 2018/01/22(月) 09:58


私も入れ子にするの得意じゃないので分解して考えると、

(1)色の有無を判定
=AND(AM10=1,AL10=1,AU10=1,AQ10=0)
これで、FALSEにならなければ、色塗らないから無視でいいですよね

(2)青に塗る条件を判定
=OR(AND(LEFT($A10,4)="0501",AQ10>=AQ$5),AND(LEFT($A10,4)="0908",AQ10>=AQ$6),AND(LEFT($A10,4)="1405",AQ10>=AQ$7),AND(LEFT($A10,4)="1608",AQ10>=AQ$8),AND(LEFT($A10,4)="1908",AQ10>=AQ$9),AP10>=AQ$4)
条件がちょっとわからなかったので、たぶんいずれかの条件を満たせば青かなとおもったのでこんな感じに。

(3)赤に塗る条件を判定
=OR(AND(LEFT($A10,4)="1908",AP10<=AP$9),AND(LEFT($A10,4)="1608",AP10<=AP$8),AND(LEFT($A10,4)="1405",AP10<=AP$7),AND(LEFT($A10,4)="0908",AP10<=AP$6),AND(LEFT($A10,4)="0501",AP10<=AP$5),AP10<=AP$4)
(2)と同じようにまとめるとこうなるはず

(4)
これを入れ子にすればいいんでしょうけど、よく見ると(2)と(3)は評価対象一緒なので、(2)がFALSEなら、(3)はTRUEになるように思います。(違ってたらすみません))
それを踏まえて手抜きすると、
=IF(AND(AM10=1,AL10=1,AU10=1,AQ10=0),IF(OR(AND(LEFT($A10,4)="0501",AQ10>=AQ$5),AND(LEFT($A10,4)="0908",AQ10>=AQ$6),AND(LEFT($A10,4)="1405",AQ10>=AQ$7),AND(LEFT($A10,4)="1608",AQ10>=AQ$8),AND(LEFT($A10,4)="1908",AQ10>=AQ$9),AP10>=AQ$4),"青","赤"),"無視")
ってなるので、これをB列にでも貼り付けて、必要な範囲にコピー(参照先は調整してください)

(5)
その後で、
=COUNTIF(B:B,"青")
=COUNTIF(B:B,"赤")
ってやれば求まらないでしょうか?

(もこな2) 2018/01/22(月) 11:25


 >【青の作業列】 
 >=AP10>=AQ$4→1を表示
   ↑
  ここだけ他と違うんですけど、AQ10と違いますか?

(半平太) 2018/01/22(月) 13:07


 「色付け」が条件付き書式での背景塗りつぶし、と仮定して・・。
 カウント範囲と条件付き書式で背景色を塗りつぶした色番号を指定して
 カウントする関数を作成してみました。

 ワークシート上で =CntInteriorColor(範囲、色番号)
 と入力します。

 Function CntInteriorColor(Target As Range, ColorNo As Long)

    Dim Rng As Range
    Dim Cnd As FormatCondition
    Dim Flag As Boolean
    Dim Cnt As Long

    For Each Rng In Target
        Flag = False
        For Each Cnd In Rng.FormatConditions
            If Cnd.Interior.Color = ColorNo Then
                If Evaluate(Cnd.Formula1) Then
                    Flag = True
                    Exit For
                End If
            End If
        Next
        If Flag = False Then
            Flag = (Rng.Interior.Color = ColorNo)
        Else
            Cnt = Cnt + 1
        End If
    Next Rng

    CntInteriorColor = Cnt

 End Function

 色番号は下記のコードで取得できます。(A1セルの場合)
 Sub GetColorNo()
    Dim Rng As Range
    Set Rng = Range("A1")
    MsgBox Rng.DisplayFormat.Interior.Color
 End Sub

 詳細までテストしてないので、うまくいくかどうかわかりません。すみません。

(ろっくん) 2018/01/22(月) 14:34


>もこな2さん

ありがとうございます!
入れ子のルールが途中で分からなくなってしまうので分かりやすい説明ありがとうございました。やってみます!

>半平太さん

ありがとうございます!ご指摘の通りでした・・あぶなかった・・・

>ろっくんさん
ありがとうございます!これはマクロではなく・・・自分で作った関数を使えるようにするなにかですか!?すごいです・・面白いですね・・。
色コードの所得方法まで書いていただけて助かります。
まだやったことのない部類なので、調べながら一度やってみたいと思います。

→まだどれも実行できていませんが(すみません、初心者過ぎて1つやるのに時間がかかってしまって・・)
取り急ぎお礼の気持ちを伝えたくて書き込みさせていただきました!
(ぴょこたん) 2018/01/23(火) 09:48


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.