[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件付き書式』(ガラパゴス)
今まで手動で色付していて色のついたセルの数とそのセルの値の合計数を出していたのですが、量が増えてきたので条件付き書式で色付をするようになりました。
が、その途端式が反応しなくなりました。
下記VBAいれてあります。合計数のところにはCOLORCOUNTとCOLORSUMがいれてあります。何か解決策はないでしょうか?
Function ColorCount(R1 As Range, C As Range)
Dim r As Range Application.Volatile ColorCount = 0 For Each r In R1 If r.Interior.Color = C.Interior.Color Then ColorCount = ColorCount + 1 End If Next r End Function Function ColorSum(R1 As Range, C As Range) Dim r As Range Application.Volatile ColorSum = 0 For Each r In R1 If r.Interior.Color = C.Interior.Color Then ColorSum = ColorSum + r.Value End If Next r End Function
< 使用 Excel:Office365、使用 OS:Windows10 >
条件付き書式の色はカウントしないのですね。仕様です。。 過去ログを探してみましたが、、ちょっとわからなかったです。すみません。
条件付き書式の場合は、、その条件をカウントする様になると思います。 ありました。 [[20050316093234]] (SoulMan) 2020/04/21(火) 22:03
条件付き書式の結果を取り出せるDisplayFormatというプロパティが
2010から導入されているんですが、
あいにく、これはユーザー定義関数の中では使えません。
ユーザー定義関数ではなく、通常のマクロ実行に代えれば、可能は可能ですね。
そのマクロをどういうタイミングで動作させるかという問題は残りますけど。
(γ) 2020/04/21(火) 22:58
横から失礼致しますが、「条件付き書式」は数式で設定されたわけですよね? でしたら、その数式を用いて、セル上でカウントしたほうが早いと思いますがいかがでしょう?
例えば、1〜50未満が赤 =AND(A1>=1,A1<50) 50〜80未満が青=AND(A1>=50,A1<80) 80以上が黄 =A1>=80 という条件付き書式を設定しているなら 下記表を参考に、COUNTIFに置き換えることでカウントできると思います。
D1=COUNTIFS(A:A,">="&C1,A:A,"<"&C2) D2=COUNTIFS(A:A,">="&C2,A:A,"<"&C3) D3=COUNTIFS(A:A,">="&C3)
|[A]|[B] |[C]|[D]|[E] [1]| 50| 青 | 1| 1|人 [2]| 60| 青 | 50| 3|人 [3]| 40|赤 | 80| 1|人 [4]| 80| 黄| | | [5]| 60| 青 | | |
条件付き書式のカウントはマクロに頼らなくてもできることが多いと思いますよ。 (稲葉) 2020/04/22(水) 08:15
(γ) 2020/04/22(水) 10:42
(γ) 2020/04/22(水) 10:47
DisplayFormatは、Excel2010で導入されたRangeのプロパティです。 条件付き書式の結果の各種書式を得ることができます。 なお、条件付き書式が設定されていないRangeに適用した場合は、通常の書式の内容を返します。 注意点としては、 ・ワークシート上で、いわゆるユーザー定義関数としては機能しない点です。 ・しかし、関数プロシージャのなかで使えないわけではありません。 ・マクロから、その関数プロシージャを呼び出せば正常に機能します。
下記のtestは、使い方の一例です。(ここは、質問者さんが適宜修正して下さい。)
Sub test() Range("A1").Value = "件数" Range("A2").Value = "合計" Range("B1").Value = ColorCount(Range("D1:F100"), Range("C1")) Range("B2").Value = ColorSum(Range("D1:F100"), Range("C1")) End Sub
Function ColorCount(R1 As Range, C As Range) As Long Dim r As Range '''Application.Volatile ColorCount = 0 For Each r In R1 If r.DisplayFormat.Interior.Color = C.DisplayFormat.Interior.Color Then ColorCount = ColorCount + 1 End If Next r End Function Function ColorSum(R1 As Range, C As Range) As Long Dim r As Range '''Application.Volatile ColorSum = 0 For Each r In R1 If r.DisplayFormat.Interior.Color = C.DisplayFormat.Interior.Color Then ColorSum = ColorSum + r.Value End If Next r End Function
(γ) 2020/04/22(水) 17:02
条件付き書式を設定した「範囲と条件」を提示してください。
ユーザー定義関数を使わなくても件数、合計の計算はできると思います。
以上 (笑) 2020/04/22(水) 17:32
書式の範囲は=$F$5:$Q$424の範囲で
=AND($C5=$B$1,F5<>"")の式が入っていてヒットすると赤くなります。
$B$1を$B$2と$B$3に変えて違う色が付きます。
BI1.BK1.BM1に各色の数が入って
BI2.BK2.BM2に各色の数値の合計数を足した数値を入れてました。
(ガラパゴス) 2020/04/22(水) 18:31
思ってたより範囲が広い・・・
集計のところ BI1セルに =B1 BK1セルに =B2 BM1セルに =B3 を入力
2行目を件数、3行目を合計にします。
■件数 BI2 =SUMPRODUCT(($C$5:$C$424=BI1)*($F$5:$Q$424<>""))
BI2をコピーして、BK2 と BM2に貼り付け
■合計 BI3 =SUMPRODUCT(($C$5:$C$424=BI1)*($F$5:$Q$424<>""),$F$5:$Q$424)
BI3をコピーして、BK3 と BM3に貼り付け
これでできますか?
以上 (笑) 2020/04/22(水) 21:47
↑ の式で重たく感じられるようだったら作業列を使った方がいいでしょう。
作業列 R5 =COUNT(F5:Q5) S5 =SUM(F5:Q5) 424行目までコピー
件数と合計 BI2 =SUMIF($C$5:$C$424,BI1,$R$5:$R$424) BI3 =SUMIF($C$5:$C$424,BI1,$S$5:$S$424)
先ほどと同じように、コピーして BK列、BM列に貼り付け。
参考まで (笑) 2020/04/22(水) 23:30
本当にありがとうございました。。
(ガラパゴス) 2020/04/23(木) 16:41
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.