塗りつぶしたセルをカウントする関数(エクセル)
エクセルを使っている者です。
エクセルを使って、文化祭のシフト表を作っているのですが、
その作業のなかで、セルを何色か使って塗りつぶし、色別に仕事内容を見やすくしました。(行:時間 列:人の名前)
そこまではいいんですが、みな平等に仕事を割り当てるため、選択した範囲内で塗りつぶされたセルの個数を色別に数えたいのです。
どんな関数を使えばよいでしょうか?
塗りつぶされたセルを、しかも色別にカウントする、そんな関数はあるのでしょうか?
投稿日時 - 2009-09-07 21:22:41
ユーザー定義関数を使った一例です。
<以下を標準モジュールに記入>
Function IntColor(ByVal argRng As Range) As Integer
'指定したセル(第1引数)の塗りつぶし色を返す関数
Application.Volatile
IntColor = argRng.Cells(1, 1).Interior.ColorIndex
End Function
Function CountIntColor(ByVal argRng As Range, ByVal argIntColor As Integer) As Long
'指定した範囲(第1引数)で指定した塗りつぶし色(第2引数)のセル個数を返す関数
Dim myCell As Range
Application.Volatile
CountIntColor = 0
For Each myCell In argRng
If myCell.Interior.ColorIndex = argIntColor Then
CountIntColor = CountIntColor + 1
End If
Next myCell
Set myCell = Nothing
End Function
<使い方>
A1:A10の範囲でA1と同じ塗りつぶし色のセルが何個あるか?
=CountIntColor(A1:A20,IntColor(A1))
投稿日時 - 2009-09-09 11:00:49
このQ&Aは役に立ちましたか?
1人が「このQ&Aが役に立った」と投票しています
回答(4)
前の回答がちょっとつめたかったのかなぁと反省したので
コードを提示します。
このコードをどこに書くか(コピペ)するか
対象範囲によりどこを修正するか
結果を表示する場所をどう変更するか
は勉強してください。
もっと短くももっと汎用的にも書けるのですが
修正しやすく初歩的に書いたつもりです。
Option Explicit
Option Base 1
Sub 色別件数()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim 有無 As Boolean
Dim x As Integer
Dim 色(10) As Integer
Dim 件数(10) As Integer
Dim 色数 As Integer
For i = 1 To 5 '1行目から5行目までの繰り返し
For j = 1 To 4 '1列目から4列目までの繰り返し
x = Cells(i, j).Interior.ColorIndex '対象のセルの色をxに代入
有無 = False 'その色が前にあったか検知するため変数
For k = 1 To 色数 '今までにその色が出てきたかを見つける
If 色(k) = x Then
有無 = True
l = k
End If
Next
If 有無 = True Then
件数(l) = 件数(l) + 1 '見つかったときその色の件数に1加算
Else
色数 = 色数 + 1 '見つからなかったとき新しい色を追加
色(色数) = x
件数(色数) = 1 '件数を1にする
End If
Next
Next
'見つかった色数分セルに表示(11行、4列目から下に色数分件数表示)
For i = 1 To 色数
Cells(i + 10, 4).Interior.ColorIndex = 色(i)
Cells(i + 10, 4) = 件数(i)
Next
End Sub
あとはよろしく
投稿日時 - 2009-09-08 13:56:06