みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

塗りつぶしたセルをカウントする関数(エクセル)

エクセルを使っている者です。
エクセルを使って、文化祭のシフト表を作っているのですが、
その作業のなかで、セルを何色か使って塗りつぶし、色別に仕事内容を見やすくしました。(行:時間 列:人の名前)
そこまではいいんですが、みな平等に仕事を割り当てるため、選択した範囲内で塗りつぶされたセルの個数を色別に数えたいのです。
どんな関数を使えばよいでしょうか?
塗りつぶされたセルを、しかも色別にカウントする、そんな関数はあるのでしょうか?

投稿日時 - 2009-09-07 21:22:41

QNo.5271088

すぐに回答ほしいです

質問者が選んだベストアンサー

ユーザー定義関数を使った一例です。

<以下を標準モジュールに記入>
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)

ANo.3

前の回答がちょっとつめたかったのかなぁと反省したので
コードを提示します。
このコードをどこに書くか(コピペ)するか
対象範囲によりどこを修正するか
結果を表示する場所をどう変更するか
は勉強してください。

もっと短くももっと汎用的にも書けるのですが
修正しやすく初歩的に書いたつもりです。

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

ANo.2

学生さんらしいので頑張って勉強しましょう。
VBAを使います。
やり方は

範囲内をなめまわします。for nextの入れ子
別のシートに色別テーブルを用意します。
なめまわしている中で色を色別テーブルにあるかを調べます
あった時1を加算
ないとき色別テーブルに新しい色を追加して1とする

投稿日時 - 2009-09-07 23:26:17

ANo.1

セルの色を数える関数はありません
「セル 色 関数」でサイト内を検索してみて沢山でてきますので
理由と代替案がわかると思います

投稿日時 - 2009-09-07 21:46:22

あなたにオススメの質問