[[20200222135408]] 『塗りつぶしプラス網掛けのセルをカウントしたい』(マクロ超初心者) ページの最後に飛ぶ

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

 

『塗りつぶしプラス網掛けのセルをカウントしたい』(マクロ超初心者)

 標準モジュールに下表のようなコードを入力します。

 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

求めるセルに =ColorCount(B2:B17,D2) と入力します。
カウントする対象のセル範囲が B2:B17、セルの塗りつぶしの色(条件とする色)のセルを D2 とした例です。

ネットで調べて上記のユーザー定義関数を作成するとセルの塗りつぶしの色がカウントします。
ですが網掛けをしてもカウント出来る様にしたいです。ご教授お願いします。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


>ネットで調べて上記のユーザー定義関数を作成する
と仰っているので、内容は理解できているのですよね?
(単にコピペしただけでは作成したとは言えないと思います)

わかっているのであれば、やってることは、rに取り出した【セルの塗りつぶし色】がCに指定している【セルの塗りつぶし色】と一致していれば+1しているわけですよね?

ということは、
同じ発想で【網掛けパターン】と【網掛けパターンの色】が一致していたらという条件にすれば、目的のものになるとおもいます。

(もこな2) 2020/02/22(土) 16:08


もこな2さま

これでしょうか?

Function PatternCount(R1 As Range, C As Range)

    Dim r As Range

    Application.Volatile
    PatternCount = 0

    For Each r In R1
        If r.Interior.Pattern = C.Interior.Pattern Then
            PatternCount = PatternCount + 1
        End If
    Next r

 End Function
(マクロ超初心者) 2020/02/22(土) 16:59

網掛けパターンのみが上記で出来ましたが
セルの塗りつぶし色プラス網掛けパターンはどうしたらいいのか分かりません。
教えてください。
(マクロ超初心者) 2020/02/22(土) 17:23

>セルの塗りつぶし色プラス網掛けパターン
条件1 and 条件2 and 条件3 にしてみてはどうでしょうか?

(もこな2) 2020/02/22(土) 17:34


反応ないですが、結局、元コードは理解できているのかでしょうか?
わからなければ【改造を考える前に】ステップ実行してそもそもの仕組みを理解したほうがよいです。

複数の条件を判定する方法が分からなかっただけであれば、先ほどコメントしたようにandでつなぐか、それぞれを掛け算すればよいです。
(VBAの世界で数値を論理値として扱おうとすると0はFalse、それ以外はTrueとして扱われ、論理値を数値として扱おうとすると、Trueはー1、Falseは0というルールであるため)

   Function 俺式関数_壱(セル範囲 As Range, 基準セル As Range) As Long
      Dim tmpRNG As Range
      Dim i As Long
      Dim buf As Object

      Application.Volatile
      Stop

      Set buf = 基準セル.Interior

      For Each tmpRNG In セル範囲
         With tmpRNG.Interior
            If .Color = buf.Color And _
               .Pattern = buf.Pattern And _
               .PatternColor = buf.PatternColor Then

               i = i + 1
            End If
         End With
      Next tmpRNG

      俺式関数_壱 = i

   End Function
   '=================================================================
   Function 俺式関数_弐(セル範囲 As Range, 基準セル As Range) As Long
      Dim tmpRNG As Range
      Dim i As Long
      Dim buf As Object

      Application.Volatile
      Stop

      Set buf = 基準セル.Interior

      For Each tmpRNG In セル範囲
         With tmpRNG.Interior
            If (.Color = buf.Color) * (.Pattern = buf.Pattern) * (.PatternColor = buf.PatternColor) Then
               i = i + 1
            End If
         End With
      Next tmpRNG

      俺式関数_弐 = i

   End Function

ちなみに、本件の場合「Application.Volatile」って意味あるんですかね?

(もこな2) 2020/02/22(土) 19:59


もこな2さま
結局、元コードは理解出来ていません。
理解出来る様に頑張ります。
ありがとうございました。
(マクロ超初心者) 2020/02/22(土) 21:33

>結局、元コードは理解出来ていません。
>理解出来る様に頑張ります。

であれば、
>これでしょうか?
みたいに、あたかも作ってみましたみたいな言いぶりは避けたほうが無難ですよ。(私が誤解しただけかもしれませんが・・・)

わからない場合は、繰り返しになりますが、ステップ実行して、どのような動き(変数に何が格納されてるのか、どの命令でなにが起こっているのか)を確認するのがよいかとおもいます。
(ユーザー定義関数も、すでに提示しているように、ブレークポイントを設定すればステップ実行が可能です。)

また、わからない(見たことない)命令が出てきたら、VBA 〇〇〇 で調べると大抵の場合、解説しているサイトがヒットするとおもいますのでトライしてみてください。

ちなみに、「Application.Volatile」の件は、どこかのセルの値が書き換えられないと再計算しないんじゃないかという疑問でした。

(もこな2) 2020/02/22(土) 21:48


条件付き書式で設定された色については計算されないみたいです。
教えてください。

(マクロ超初心者) 2020/02/23(日) 15:24


 【VBA 条件付き書式で設定された色】
とかで、検索かけると、たくさん説明が有ったような気がいたします。
覚えて無くて済みません。。。m(__)m  ? 〜 フォーマットカラー なんとか
^^; とほほ〜 m(_ _)m
(隠居じーさん) 2020/02/23(日) 15:32

Rangeオブジェクトの DisplayFormat プロパティでした。。。のカラーとかで

(隠居じーさん) 2020/02/23(日) 15:39


>条件付き書式で設定された
後付けになりますが、やっぱりそんなことだったんですねぇ。

その手の話は幾度もこの掲示板で出てきてますので、いったん過去ログをチェックされたほうが良いと思います。

 一例:
[[20180214190002]] 『CountColurのユーザー定義関数について』(ぱんだちゃん)
[[20191228131613]] 『条件付き書式の取得』(四太郎)
[[20180527092843]] 『色付きセルにロット番号を振り分けて」行く方法』(ニシポン)
[[20181218113955]] 『VBA 背景色の取得』(いちち)
[[20190717170716]] 『条件付き書式で設定された背景色のセルをカウント』(マサ)

そのうえで、ユーザー定義関数では、DisplayFormatプロパティが使えないので、もともとの条件自体をカウントしていくことを考えたほうが良いように思われます。

(もこな2) 2020/02/23(日) 16:22


お!、確かに、ユーザー定義関数ではエラーって説明がありましたですね。すみません
ユーザー定義関数を失念致しておりました、私の回答は、無視、没にしておいてくださ
いませ。 m(_ _)m

(隠居じーさん) 2020/02/23(日) 16:57


もこな2さま
もともとの条件自体をカウントしていくことで解決しました。
色々なアドバイスをありがとうございました。
(マクロ超初心者) 2020/02/23(日) 20:52

コメント返信:

[ 一覧(最新更新順) ]


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