色付きセルのみを合計する [SumColor]
関連記事 [ 自分で関数を作ってみる ]
ユーザー定義関数を使って色付きセルを(指定した色のみ)合計したいと思います。
簡単に言うとSUMIFの色バージョンです。
但し、色に重要性を持たすという事は一般的に避けるべきです。なぜなら色の認識について個人差があるからです。たとえば赤くしているセルがありますが、この定義関数を知らなければ何の為に赤くしているのか理解出来ませんし、勝手に色を変えられるかもしれません。データの場合はなかなか勝手に変えたりしませんよね。
このことを踏まえた上で、自分用に使ってみる分には結構使える機能ではないでしょうか。
Interior.ColorIndex
まずは色情報を読み取らないと始まりません。色判別したいんだから。
その時に使うのがInterior.ColorIndex
Excelには色番号というものがあります。赤だと3番になります。
カラーパレットの並びと番号はバラバラですが、各色に番号というものが付いています。
Interior.ColorIndex で背景色の色番号を返します。
ほかにFont.ColorIndexなどもありますが、ここでは背景色を使います。
上の画像で Cells(“A1”).Interior.ColorIndex だと赤色の3が返ります。
SumColor
関数名 | SumColor( 計算範囲 , 条件色セル ) |
---|---|
機能 | 計算範囲の中で色の条件色セルと同じ色の値を合計する |
コード
Function SumColor(計算範囲, 条件色セル)
SumColor = 0
For x = 1 To 計算範囲.Rows.Count
If 計算範囲.Rows(x).Interior.ColorIndex = 条件色セル.Interior.ColorIndex Then
SumColor = SumColor + 計算範囲.Rows(x)
End If
Next
End Function
実際の使い方
ちょっとアレンジを加えれば白以外のセルの合計を・・・という風にも出来ますね。
注意点
注意点が2点あります!まず、この計算は縦1列にしか対応していません。A1:C10のように複数列の場合はエラーとなります。
次回記事でこの問題について対応しております。そちらの方法を使えば複数列でも合計出来るようになります。
もう1点は、関数を入れた後にセル色を変更した場合。たとえばA7はやっぱり赤だった、と色を変更してもC3の計算結果は更新されません。色を変更しただけではExcelは再計算行われないのです。
対処法としては、Alt+Ctrl+F9を押して強制的にSheetを更新させるのが良いでしょう。
続き [ 色付きセルの件数をカウントする [CountColor] ]
関連記事 [ 自分で関数を作ってみる ]
アドインダウンロード
ダウンロードページに当記事で紹介したCountColorのアドインファイルを掲載しております。
関連記事
- 前の記事
- 住宅ローンを計算しよう-①
- 次の記事
- 色付きセルの件数をカウントする [CountColor]
Comment
SumColor = SumColor + 計算範囲.Rows(x)
↓ではないですか?
SumColor = SumColor + 1
それだと件数を数えるCountになりますよね?
これは値のSum合計させたいのでこれで問題ないです。
すみません、勘違いしてましたm(_ _)m
コードをコピペしてみたのですが、うまくできません。
表の中の黄色のセルの合計を求めたいのですが、どうしたらいいのでしょうか。
実行ボタンを押すとマクロのダイアログボックスが出てきます。
回答宜しくお願い致します。
はじめまして。
Sumcolorで複数列に対応するにはどのようなコードを使用すればいいですか?
Function SumIndexColor(計算範囲, 条件色セル)
Application.Volatile
SumIndexColor = 0
For y = 1 To 計算範囲.Columns.Count
For x = 1 To 計算範囲.Rows.Count
If 計算範囲.Rows(x).Columns(y).Interior.ColorIndex = 条件色セル.Interior.ColorIndex Then
SumIndexColor = SumIndexColor + 計算範囲.Rows(y).Columns(x)
End If
Next
Next
End Function
複数列に対応したSumIndexColorという関数を作りました。
Function SumIndexColor(計算範囲, 条件色セル)
Application.Volatile
SumIndexColor = 0
For y = 1 To 計算範囲.Columns.Count
For x = 1 To 計算範囲.Rows.Count
If 計算範囲.Rows(x).Columns(y).Interior.ColorIndex = 条件色セル.Interior.ColorIndex Then
SumIndexColor = SumIndexColor + 計算範囲.Rows(y).Columns(x)
End If
Next
Next
End Function
xとyが反転してました。修正しました。
Function SumIndexColor(計算範囲, 条件色セル)
Application.Volatile
SumIndexColor = 0
For y = 1 To 計算範囲.Columns.Count
For x = 1 To 計算範囲.Rows.Count
If 計算範囲.Rows(x).Columns(y).Interior.ColorIndex = 条件色セル.Interior.ColorIndex Then
SumIndexColor = SumIndexColor + 計算範囲.Rows(x).Columns(y)
End If
Next
Next
End Function