指定範囲の指定色を数える関数

会社から自分に送ったメールが届いてなくて顔面蒼白です・・・。やばい。クビになったら笑いましょう(;´Д`)

=cc(数えたい範囲,数えたい色のセル)で数える関数だよ。
↓こんな感じで使えます
f:id:elve:20210727194148p:plain

Function cc(a As Range, b As Range) As Long
Set b = b.Item(1)
Dim sh As Worksheet: Set sh = a.Parent
If Intersect(a, sh.UsedRange) Is Nothing Then
cc = 0
Exit Function
End If
Dim countcolor As Long: countcolor = b.Interior.Color
Dim lc As Long: lc = WorksheetFunction.Min(a.Item(a.count).Column, sh.UsedRange.Item(sh.UsedRange.count).Column)
Dim lr As Long: lr = WorksheetFunction.Min(a.Item(a.count).Row, sh.UsedRange.Item(sh.UsedRange.count).Row)
Dim c As Long, r As Long, count As Long: count = 0
For c = a.Item(1).Column To lc
For r = a.Item(1).Row To lr
If sh.Cells(r, c).Interior.Color = countcolor Then count = count + 1
Next
Next
cc = count
End Function

A:Aみたいに列で色つけた場合は全部は数えません。使用範囲(UsedRange)内で数えます。
f:id:elve:20210727195648p:plain

なので、例えば別のシートからだとこんな感じになります。
f:id:elve:20210727200840p:plain

調べたこと

Intersect

2つの範囲が重なってるかどうか。(間違えて使ってない範囲を指定してる場合0を返すため)
Office TANAKA – Excel VBA Tips[あるセルがセル範囲に含まれるかどうか]

範囲の右下

EXCEL2003のVBAで、Rangeオブジェクト(矩形)で取得されている… – Yahoo!知恵袋

UsedRange使わないとA:Aみたいに選択した時めっちゃ時間かかる(;´Д`)

どのくらい面白かった?

星を押して送信してね

平均 0 / 5. Vote count: 0

是非フォローしてください

最新の情報をお伝えします

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です