[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『CountColurのユーザー定義関数について』(ぱんだちゃん)
はじめまして。
シート内の指定した範囲内で、特定の色のセルの数を数えるコードを標準モジュールにいれ、ユーザー定義で=CountColurを指定し、動くように設定したのですが、条件付き書式にて塗られたセルの色がカウントされません。
入れたコードは
Function CountColor(hani, jouken)
Application.Volatile
CountColor = 0
For y = 1 To hani.Columns.Count
For x = 1 To hani.Rows.Count
If hani.Rows(x).Columns(y).Interior.ColorIndex = jouken.Interior.ColorIndex Then
CountColor = CountColor + 1
End If
Next
Next
End Function
ユーザー定義関数は
CountColor(範囲,数えたい色が塗ってあるセル番号)
です。
どのようにしたらよろしいでしょうか。
ご教授お願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
(ぱんだちゃん) 2018/02/14(水) 19:11
すぐにエクセル開けないので試せないが、条件付き書式が設定されているセルのInterior.ColorIndexが何になっているのか調べてみたほうがいいかもしれない
(もこな2) 2018/02/14(水) 20:01
確か条件付書式の色を調べるのはかなり難しかったと思います。 昔の資料がどこに行ったか解らんのでこんな感じにしてみました。
参考 http://qa.itmedia.co.jp/qa8138525.html http://www.relief.jp/docs/excel-vba-delete-a-formatcondition.html
Dim Cel As Range For Each Cel In Range("D8:D10") If Cel.FormatConditions.Count > 0 Then If Application.Evaluate(Cel.FormatConditions.Item(1).Formula1) = True Then Color_No = Cel.FormatConditions(1).Interior.Color MsgBox "条件付書式の色 成立" & vbLf & "色No " & Color_No Else MsgBox "条件付書式の色 不成立" End If Else MsgBox "条件付書式無" '←参考の為に入れてみたけど、数が多い場合は外してください。 End If Next
尚、条件付書式は、1個だけの状態です。 複数の場合は、 FormatConditions.Item(1) ここ↑を FormatConditions.Items とかして回すのかな?と思ってます。 未確認。
すみません。 上に書いたやつ全く使えません。 無視してください。 なんか2007の条件付書式の設定が一括して処理したがるみたいで 2007以前と違うような??? 2/15 12:32 追加
(BJ) 2018/02/14(水) 20:59
当方の環境(Excel2007)で条件付き書式で塗りつぶしを試してみましたけど、やはり条件で見た目が変わってもInterior.ColorIndexは変わらないので、他のプロパティを見るしか無いですね。
(もこな2) 2018/02/15(木) 00:22
一応2010以降であれば Range("A1").DisplayFormat.Interior.Color とDisplayFormatをかますことで条件付き書式にも対応したセルの色を取得できるがDisplayFormatはユーザー定義関数では 使えないという制限がある。 マクロにしてボタンを押すとカウントした値を表示させるといった用途には使える。 (ねむねむ) 2018/02/15(木) 09:20
解ったこと。
例えば D1だけを選択して D1に =A1=8 といった、条件付書式を設定したとします。
これを10行目まで同じようにしたいと思った場合で、
D11を下に1行目までフィルドラッグした場合や、 D1:D10を選択して、条件付書式にて =A1=8 と書いて、Entした場合や D1セルをコピー、D2:D10セルを選択して貼り付け。 普通は多分こんな感じで、設定すると思います。
これだと条件付書式としては動きますが ルール管理で見ますと、運用先が =$D$1:$D$10 こうなってしまうんですよね。 こうなった場合は、先に上げたコードではまともに動きません。
例えば、D7セルの条件付書式の運用先が =$D$7 ならOK。 =$D$1:$D$10 ならダメ。
D1セルをコピー、D2〜D10に1個づつ貼り付けてくれればいいんですが、面倒くさいよね。 尚、2007での挙動なので、別のバージョンでまた違うかもしれません。
Function RR(Rng As Range) As Long Dim Cel As Range Application.Volatile 'For Each Cel In Range("D1:D10") For Each Cel In Rng If Cel.FormatConditions.Count > 0 Then If Application.Evaluate(Cel.FormatConditions.Item(1).Formula1) = True Then Color_No = Cel.FormatConditions(1).Interior.Color 'MsgBox "条件付書式の色 成立" & vbLf & "色No " & Color_No RR = RR + 1 Else 'MsgBox "条件付書式の色 不成立" '※1 End If Else 'MsgBox "条件付書式無" '←参考の為に入れてみたけど、数が多い場合は外してください。 '※2 End If Next End Function
※1、2の場所を Elseif セルの色がxxxだったら RR = RR + 1 といった、コードを継ぎ足してくれれば・・・・。 まあ、エクセル10なら、ねむねむさん提示の方法ですみますけどね。 (BJ) 2018/02/15(木) 16:02
[[20140819105825]]
『[談] 条件付き書式の着色セル判定ツール』(半平太)
(※)指定範囲にあるセルの条件付き書式のColorIndexの配列さえ取得できれば、
後は何とでもなると言う考え方です。
(半平太) 2018/02/15(木) 17:25
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.