• ベストアンサー

Excel2007でカウントしたいのですが

Excel2007でカウントしたいですがご協力お願い致します。 今ところはセルU6~U4363にデータが入ってますが、それ以上にデータは増えていきます。 幾つか背景カラー(ミドリ)が入ってるセルがありまして、U列の6行目から下のカラーセルの合計個数をセルU4に表したいです。 どなたかご協力お願い致します。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

先ほどのコードにはちょっと間違いがあったので、 VBAの画像を加え再ポストします。 =CntColor(U6:U20000,V3) =SumColor(U6:U20000,V4) ↑が計算式例 ↓がコードです。 Option Explicit '//--------------指定色のセルを数える Function CntColor(TargetRange As Range, BaseColorCell As Range) As Integer  Dim wkCounter As Integer  Dim wkRange As Range   wkCounter = 0  For Each wkRange In TargetRange   If wkRange.Interior.ColorIndex = BaseColorCell.Interior.ColorIndex Then    wkCounter = wkCounter + 1   End If  Next wkRange  CntColor = wkCounter End Function '//--------------指定色のセルの値を合計する Function SumColor(TargetRange As Range, BaseColorCell As Range) As Double  Dim wkCounter As Double  Dim wkRange As Range  wkCounter = 0  For Each wkRange In TargetRange   If wkRange.Interior.ColorIndex = BaseColorCell.Interior.ColorIndex Then    wkCounter = wkCounter + wkRange.Value   End If  Next wkRange  SumColor = wkCounter End Function

その他の回答 (4)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.5

>先述のソースはSubとかは必要になりますか? セルの中で使う計算式をVBAで用意したものなので subは登場しません

961awaawa
質問者

お礼

ありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

手前みそですが、過去に似た質問がありコードを紹介しました。 よかったら参考にしてみてください。 https://okwave.jp/qa/q9479525/a26449484.html それぞれ、関数で色を指定するのではなく、 引数に「既に色の染まったセル」を指定するのがミソです。 ■指定した色の染まったセルの数を求める関数 Function CntColor(TargetRange As Range, BaseColorCell As Range) As Integer  Dim wkCounter As Integer  Dim wkRange As Range    wkCounter = 0  For Each wkRange In TargetRange   If wkRange.Interior.ColorIndex = BaseColorCell.Interior.ColorIndex Then    wkCounter = wkCounter + 1   End If  Next wkRange    SumColor = wkCounter End Function ■指定した色の染まったセルの値の合計を求める関数 Function SumColor(TargetRange As Range, BaseColorCell As Range) As Double  Dim wkCounter As Double  Dim wkRange As Range  wkCounter = 0  For Each wkRange In TargetRange   If wkRange.Interior.ColorIndex = BaseColorCell.Interior.ColorIndex Then    wkCounter = wkCounter + wkRange.Value   End If  Next wkRange  SumColor = wkCounter End Function

961awaawa
質問者

お礼

HohoPapaさんご返答ありがとうございます。 先述のソースはSubとかは必要になりますか?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Excelのワークシート関数(普通に言う関数)では、色(文字色やセルの背景色など)は判別できない。このことを知らない人がなんと多いことか。 ーー 質問で言う「カウント」は、件数のことでなく、セルの値の、合計数と解釈した。 ーー そこで、これができるVBAの出番になる。 標準モジュールに ユーザー関数のコードを Function sm(a As Range, clr) s = 0 Dim cl As Range For Each cl In a 'MsgBox cl.Interior.ColorIndex If cl.Interior.ColorIndex = clr Then s = s + cl End If Next sm = s End Function と作って ーー シートの結果を出したいセルに =SM(A1:A10,6) と入れると(6は黄色の色コードです) 例データ のセル範囲がA1:A10で 空白 2 <-背景色黄色 4 5 3 6 <-背景色黄色 7 8 9 <-背景色黄色 11 <-背景色黄色 の場合、結果は 28 となる。 ーー しかし問題があって、「背景カラー」の設定にはいろいろなやり方があって、 この設定したときのことと、VBAが分かっていないと使えない。 やる気があれば、Googleで「vba セルの背景色を設定」で照会し、調べて、勉強するしかない。 例えば http://officetanaka.net/excel/vba/cell/cell05.htm の 「背景色(塗りつぶし色)を設定するには」 で、今回は裏の、「背景色(塗りつぶし色)を取得」に当たることを行う。 色(別は)にはコードが振られているので、その色の仕組み(体系、または定義された名前、(例 黄色ならvbYellow)を探し当てないと話にならない。 他に https://www.tipsfound.com/vba/07006 当初、どのようにして、VBA的に言って、セルに色を振ったかを知らないと 話が進まない。

961awaawa
質問者

お礼

説明って難しいですね。ありがとうございます。imogasiさん。

回答No.1

まずはこのへんをご参考に https://okwave.jp/qa/q2000523.html

961awaawa
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう