アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

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



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

前の回答がちょっとつめたかったのかなぁと反省したので


コードを提示します。
このコードをどこに書くか(コピペ)するか
対象範囲によりどこを修正するか
結果を表示する場所をどう変更するか
は勉強してください。

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

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

あとはよろしく
    • good
    • 0

学生さんらしいので頑張って勉強しましょう。


VBAを使います。
やり方は

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

セルの色を数える関数はありません


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!