下記記事をご覧下さった方より、リクエストをいただきました。

【リクエスト内容】
条件付きで色付けしたセルの値を合計したいと思い、こちらに辿り着きました。
こちらの記事はセルのカウントとの事ですが、何か良い方法があればご教示いただけますと幸いです。
「セルの個数をカウントするのではなく、セルに入力されている値の合計を出したい」とのお話ですね。
思いつきもしない内容でしたので、こうしたリクエストは有難いです。
今まで紹介してきた記事のVBAコードを編集し、ご希望に沿ったものをご用意しました。この記事をお読みいただければ、コピペするだけで簡単に設定できます!

各画像はクリックで拡大できるよ!
こんな場合に対応できる!
当記事は、どんなふうに条件付き書式でセルに色を塗っている状態でも、だいたい対応できます。
【1】同じ列に色が塗られている場合
【2】バラバラに色が塗られている場合
マクロを使わず集計する
マクロを使用したエクセルは拡張子が変わるだけでなく、社内のサーバー上で開こうとしたり、ダウンロードする際に「信頼できるか」「安全ではない」等の注意が出ることがあります。
たとえば
エクセルを開く前にこのような警告が表示されたり、
エクセル上部に警告が出ることがあります。
このような表示を見ると、パソコンやエクセルに詳しくない方は「本当に使って大丈夫なの?」と、不安に駆られてしまうと思います。
そのような場合、無理してマクロを使用する必要はありません!
前項【1】の場合
❶ 下図のように列の一番上にフィルターを設置します
❷ 合計のセルには「=SUBTOTAL(9,範囲)」と入力します。
9は集計方法で「SUM関数」と同じ役割を果たします。
❸ この状態でフィルターから「色フィルター」を選択すれば、
❹ 選択した色のセルだけが抽出され、それに準じた合計値が表示されます。
前項【2】の場合
集計セルがバラバラである場合、【1】の方法が使えません。
よって、別に集計する必要があります。
ここでは発想を転換し、セルの色をカウント要素にしない方法を用います。
下図は一見セルの色を基準に値を合計しているように見えますが、実際にはセルの色で判定していません。ここで使用しているのは「SUMIF」という関数になります。
=SUMIF(範囲,検索条件)です。
※実際には一番最後に「合計範囲」がありますが、使用しません。
下図は「2の場合には水色になる」ように条件付き書式で設定されているので、検索条件にF4(つまり2)を選択しています。
上記はあくまで一例ですが、マクロ以外の方法でも集計できる場合があるということを押さえておいていただければと思います。
自動書式で色を付けたセルの値を合計する方法
それでは本題に入ります。
操作方法は同じですので、今回はバラバラに色がついた場合を例にあげます。
作業❶ セルを選択
合計を出したいセルを選択します(今回の場合はF2)
作業❷ 該当セルに数式を入れる
該当セル(F2)に、数式『=ColorSum(範囲,検索条件)』を入力します
ここでいう「検索条件」とは「カウントしたい対象と同じ色のセル」です。1の場合には薄いオレンジ色ですね。
ちなみに「検索条件」のセル色は、条件書式で設定する必要はなく、自分で色をつければOKです。
この式を入れただけでは、まだ作用しません。
続けてVBAの設定をしましょう!
作業❸ VBAにコードを設定(コピペで簡単!)
➊「開発」タブを表示します。
➊ どこでもいいので、リボンの上で右クリック
→「リボンのユーザー設定」を選択
➋「開発」にチェックを入れる→OKを押す
これで表示されます!
➋「開発」タブの「Visual Basic」を開きます。
➌ 左側、白い部分で右クリック →「挿入」→「標準モジュール」を選択
➍ 下記画像を参考にして、
右側に表示されたスペースに、以下のコードをコピペして下さい。
Function ColorSum(Rng As Range, r2 As Range) As Long
Dim myRng As Range
Dim Col_cnt As Long
Dim sh As Worksheet
Application.Volatile
Col_cnt = 0
Set sh = Rng.Parent
For Each myRng In Rng
If sh.Evaluate("CColor3(" & myRng.Address & ")") = r2.Interior.Color Then
Col_cnt = Col_cnt + myRng.Value
End If
Next myRng
ColorSum = Col_cnt
End Function
Function CColor3(r As Range) As Long
CColor3 = r.DisplayFormat.Interior.Color
End Function
【セルの文字色を変更している場合】
Function ColorSum2(Rng As Range, r2 As Range) As Long
Dim myRng As Range
Dim Col_cnt As Long
Dim sh As Worksheet
Application.Volatile
Col_cnt = 0
Set sh = Rng.Parent
For Each myRng In Rng
If sh.Evaluate("CColor4(" & myRng.Address & ")") = r2.Font.Color Then
Col_cnt = Col_cnt + myRng.Value
End If
Next myRng
ColorSum2 = Col_cnt
End Function
Function CColor4(r As Range) As Long
CColor4 = r.DisplayFormat.Font.Color
End Function

➎ Visual Basicには保存ボタンがありませんので、×で閉じます。
エクセルの表示はまだエラーのままだと思いますので、どこでもいいからセルをダブルクリックすると表示が変わります。
作業❹ ファイルの保存
大切なこととして、保存するときは「マクロ有効ブック」を選択しましょう!
「ファイルの種類」から「Excelマクロ有効ブック」を選択します。
ふつうにエクセルとして保存すると、せっかくのVBAコードが消えてしまいますのでご注意ください!

以上で作業は終了だよ。
無事にできたかな?
お疲れさまでした!
コメント