締切済み

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

  • 困ってます
  • 質問No.9605725
  • 閲覧数119
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 81% (213/261)

Excel2007でカウントしたいですがご協力お願い致します。

今ところはセルU6~U4363にデータが入ってますが、それ以上にデータは増えていきます。

幾つか背景カラー(ミドリ)が入ってるセルがありまして、U列の6行目から下のカラーセルの合計個数をセルU4に表したいです。

どなたかご協力お願い致します。

回答 (全5件)

  • 回答No.5

ベストアンサー率 59% (195/327)

Excel(エクセル) カテゴリマスター
>先述のソースはSubとかは必要になりますか?

セルの中で使う計算式をVBAで用意したものなので
subは登場しません
  • 回答No.4

ベストアンサー率 59% (195/327)

Excel(エクセル) カテゴリマスター
先ほどのコードにはちょっと間違いがあったので、
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
  • 回答No.3

ベストアンサー率 59% (195/327)

Excel(エクセル) カテゴリマスター
手前みそですが、過去に似た質問がありコードを紹介しました。
よかったら参考にしてみてください。

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

お礼率 81% (213/261)

HohoPapaさんご返答ありがとうございます。
先述のソースはSubとかは必要になりますか?
投稿日時 - 2019-04-12 21:45:59
  • 回答No.2

ベストアンサー率 28% (4476/15933)

Excel(エクセル) カテゴリマスター
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

お礼率 81% (213/261)

説明って難しいですね。ありがとうございます。imogasiさん。
投稿日時 - 2019-04-12 21:51:04
  • 回答No.1

ベストアンサー率 37% (48/127)

まずはこのへんをご参考に

https://okwave.jp/qa/q2000523.html
お礼コメント
961awaawa

お礼率 81% (213/261)

ありがとうございました。
投稿日時 - 2019-04-13 01:11:34
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ