[[20180214190002]] 『CountColurのユーザー定義関数について』(ぱんだちゃん) ページの最後に飛ぶ

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

 

『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 >


すみません、カラーのスペル間違えてました。
実際の定義関数、標準モジュールに記載しているのはColorで間違いありません。

(ぱんだちゃん) 2018/02/14(水) 19:11


自信ないが条件付き書式って条件で書式変えてるだけで、実際にInteriorプロパティ操作してるんだろうか?

すぐにエクセル開けないので試せないが、条件付き書式が設定されているセルの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.