[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『塗りつぶしプラス網掛けのセルをカウントしたい』(マクロ超初心者)
標準モジュールに下表のようなコードを入力します。
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
これでしょうか?
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
(もこな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
であれば、
>これでしょうか?
みたいに、あたかも作ってみましたみたいな言いぶりは避けたほうが無難ですよ。(私が誤解しただけかもしれませんが・・・)
わからない場合は、繰り返しになりますが、ステップ実行して、どのような動き(変数に何が格納されてるのか、どの命令でなにが起こっているのか)を確認するのがよいかとおもいます。
(ユーザー定義関数も、すでに提示しているように、ブレークポイントを設定すればステップ実行が可能です。)
また、わからない(見たことない)命令が出てきたら、VBA 〇〇〇 で調べると大抵の場合、解説しているサイトがヒットするとおもいますのでトライしてみてください。
ちなみに、「Application.Volatile」の件は、どこかのセルの値が書き換えられないと再計算しないんじゃないかという疑問でした。
(もこな2) 2020/02/22(土) 21:48
(マクロ超初心者) 2020/02/23(日) 15:24
【VBA 条件付き書式で設定された色】 とかで、検索かけると、たくさん説明が有ったような気がいたします。 覚えて無くて済みません。。。m(__)m ? 〜 フォーマットカラー なんとか ^^; とほほ〜 m(_ _)m (隠居じーさん) 2020/02/23(日) 15:32
(隠居じーさん) 2020/02/23(日) 15:39
その手の話は幾度もこの掲示板で出てきてますので、いったん過去ログをチェックされたほうが良いと思います。
一例: [[20180214190002]] 『CountColurのユーザー定義関数について』(ぱんだちゃん) [[20191228131613]] 『条件付き書式の取得』(四太郎) [[20180527092843]] 『色付きセルにロット番号を振り分けて」行く方法』(ニシポン) [[20181218113955]] 『VBA 背景色の取得』(いちち) [[20190717170716]] 『条件付き書式で設定された背景色のセルをカウント』(マサ)
そのうえで、ユーザー定義関数では、DisplayFormatプロパティが使えないので、もともとの条件自体をカウントしていくことを考えたほうが良いように思われます。
(もこな2) 2020/02/23(日) 16:22
(隠居じーさん) 2020/02/23(日) 16:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.