こんにちは、kazuです。
本日はExcelで色付きセルのみ計算する関数を自作したので、記事にしようと思います。
カスタム関数とは?
一般的にセルに( =SUM(A1:A3) ) とか入れますよね?
これがデフォルトからある関数です。
そしてカスタム関数というのはVBAで自分でプログラムを組んでセルに
一般的な関数と同じような使い方をするものをカスタム関数といいます。
要件を見ていこう!
関数の要件を書いていきましょう!
1. 関数名はcolorSUMにするつまり指定する時は =colorSUM(color,cell) を入力する
2. 第1引数は文字列の色を指定すること、第2引数はセルを指定すること(例:=colorSUM(“red”,A1:A7))
3. 指定できる色は以下の表とする
4. 第1引数を誤った文字列がある場合はメッセージダイアログを表示する
| 色 | RGB | カラーコード | color引数(第1引数) | 色 | RGB | カラーコード | color引数(第1引数) |
| 黒色 | RGB(0,0,0) | #000000 | black | 茶色 | RGB(128,0,0) | #800000 | maroon |
| 白色 | RGB(255,255,255) | #ffffff | white | 緑色 | RGB(0,128,0) | #008000 | green |
| 赤色 | RGB(255,0,0) | #ff0000 | red | 紺色 | RGB(0,0,128) | #000080 | navy |
| 黄緑色 | RGB(0,255,0) | #00ff00 | lime | オリーブ色 | RGB(128,128,0) | #808000 | olive |
| 青色 | RGB(0,0,255) | #0000ff | blue | 紫色 | RGB(128,0,128) | #800080 | purple |
| 黄色 | RGB(255,255,0) | #ffff00 | yellow | 青緑色 | RGB(0,128,128) | #008080 | teal |
| ピンク色 | RGB(255,0,255) | #ff00ff | pink | 銀色 | RGB(192,192,192) | #c0c0c0 | silver |
| 水色 | RGB(0,255,255) | #00ffff | aqua | 灰色 | RGB(128,128,128) | #800080 | gray |
ちなみに以下が実際使っている時の画像になります。

実際にコードを見てみよう!
では実際にVBAコードを見てみましょう!
' 標準モジュールに記載
Function colorSUM(color As Variant, selectRange As range) As Double
Dim colorRange As range
Dim total As Double
Dim colorIdx As Integer
Application.Volatile
colorIdx = colorJudgement(CStr(color))
If colorIdx = 0 Then
MsgBox "第一引数が誤っています。再度ご確認お願いします。", vbOKOnly + vbCritical
Else
For Each colorRange In selectRange
' 特定の色のみ条件に入るようにする
If colorRange.Interior.colorIndex = colorIdx Then
total = total + colorRange.Value
End If
Next colorRange
colorSUM = total
End If
End Function
Private Function colorJudgement(color As String) As Integer
Dim colorDic As Object
Set colorDic = CreateObject("Scripting.Dictionary")
' 黒色 RGB(0,0,0) #000000
colorDic.Add "black", 1
' 白色 RGB(255,255,255) #ffffff
colorDic.Add "white", 2
' 赤色 RGB(255,0,0) #ff0000
colorDic.Add "red", 3
' 黄緑色 RGB(0,255,0) #00ff00
colorDic.Add "lime", 4
' 青色 RGB(0,0,255) #0000ff
colorDic.Add "blue", 5
' 黄色 RGB(255,255,0) #ffff00
colorDic.Add "yellow", 6
' ピンク色 RGB(255,0,255) #ff00ff
colorDic.Add "pink", 7
' 水色 RGB(0,255,255) #00ffff
colorDic.Add "aqua", 8
' 茶色 RGB(128,0,0) #800000
colorDic.Add "maroon", 9
' 緑色 RGB(0,128,0) #008000
colorDic.Add "green", 10
' 紺色 RGB(0,0,128) #000080
colorDic.Add "navy", 11
' オリーブ色 RGB(128,128,0) #808000
colorDic.Add "olive", 12
' 紫色 RGB(128,0,128) #800080
colorDic.Add "purple", 13
' 青緑色 RGB(0,128,128) #008080
colorDic.Add "teal", 14
' 銀色 RGB(192,192,192) #c0c0c0
colorDic.Add "silver", 15
' 灰色 RGB(128,128,128) #800080
colorDic.Add "gray", 16
If colorDic.Exists(color) Then
colorJudgement = colorDic.Item(color)
Else
colorJudgement = 0
End If
End Function
簡単にカラー判定を解説すると引数の文字列を渡してさらにcolorJudgement(color As String)に引数を渡します。そしてkey(色の文字列),value(colorIndex)を設定してあるので、引数の文字列と設定しているkeyの存在チェックをして存在していたらそのkeyからvalue(colorIndex(Integer型))を取得そして戻り値として返すメソッドです。
その先はcolorIndexに設定した条件のみ計算されるという仕組みです。ちなみにどの色にも一致しない場合は0を返して0だった場合ダイアログ表示するというような感じにしています。
最後に
いかがでしたでしょうか?
今回エクセルで関数を作ってみました。
あ、最後に一つ補足です。カスタム関数はすべてのExcelで使えるようにできます。
それはExcelアドイン(*.xlam)で保存してください。
これですべてのExcelファイルでカスタム関数が使えるようになります。
最後までご覧いただきありがとうございました。