Excelで色付きのセルを関数でカウントする方法
Excelでは、COUNTやCOUNTIFなどの関数を使用することで、特定の条件を満たすセルをカウントすることができます。
COUNT関数であれば数値を含むセルをカウントすることができますし、COUNTIF関数であれば指定した文字列を含むセルをカウントすることができます。
しかし、これらはいずれも、セルに入力された値をもとにカウントを行なっています。
つまり、背景色や文字色などの、セルの値以外の条件をもとにセルをカウントすることはできません。
ただ、実際にExcelを使用するとき、目的となるデータに色をつけておいて、最後にその数を数えたいというシチュエーションがあるかと思います。
そこで、この記事では、背景色をもとにセルをカウントする方法を解説します。
具体的には、Excel VBAを使用して、特定の背景色になっているセルをカウントできる関数を作る方法を解説します。
背景色をもとにセルをカウントする関数を作成する方法
具体例として、”背景色が黄色になっているセルをカウントする関数”を作成する方法を解説します。
Excel VBAを使用して作成しますが、以下の2点に分けて解説します。
- VBAのコード
- 1.のコードをもとにマクロを作成する方法
「1. VBAのコード」については、コードの内容を簡単に解説します。
コードの詳細には興味がなく、関数を使用できればそれで良い、という方は解説部分を読み飛ばしてください。
「2. 1.のコードをもとにマクロを作成する方法」で、1のコードをもとにマクロを作成する方法を解説します。
1. VBAのコード
使用するVBAのコードは以下の通りです。
Option Explicit
Function CountYellowCells(ParamArray ranges() As Variant) As Long
Dim rng As Variant
Dim cell As Variant
Dim count As Long
For Each rng In ranges
For Each cell In rng
If cell.Interior.Color = vbYellow Then
count = count + 1
End If
Next cell
Next rng
CountYellowCells = count
End Function
引数にParamArrayと指定することで、複数の範囲を選択できるようにしてあります。
これにより、複数の範囲をカンマ区切りで指定することができるようになっています。
例えば、A1:A2とC1:C2という飛び飛びの範囲を指定する場合、以下のように記載することができます。
=CountYellowCells(A1:A2,C1:C2)
For Each以降については、指定されたセル範囲それぞれについてセルの色が黄色かどうか判定しています。
For Each文が2つネストされている(For Each文の中にFor Each文がある)のは、セル範囲をカンマ区切りで指定できるようにするのに対応したものです。
先ほどの「CountYellowCells(A1:A2,C1:C2)」の例で言うと、外側のFor Each文では、A1:A2とC1:C2に対して1回ずつ、計2回の繰り返し処理を行います。
内側のFor Each文ではひとつひとつのセルに対して処理を行います。
例えば、外側のFor Each文でA1:A2の処理をしているとき、内側のFor Each文では、A1、A2それぞれのセルに対して1回ずつ処理を行うことになります。
If文でセルの背景色が黄色かどうかを判定し、もし黄色であれば、countという変数の数値をインクリメント(プラス1)するようにしてあります。
2. VBAのコードをもとにマクロを作成する方法
上記のVBAのコードを使用してマクロを作成する手順は、以下の通りです。
① Alt + F11キーを押して、VBAのウィンドウを開きます。
② 左側に表示されているプロジェクトエクスプローラーの空白部分で右クリックし、「挿入」→「標準モジュール」を選択します。
③ 右側に表示されたウィンドウに、上記のコードをコピー&ペーストします。
④ 「×」ボタンを押して、VBAのウィンドウを閉じます。
手順は以上です。これで、CountYellowCells関数が使用できるようになります。
なお、マクロ入りのファイルを保存する場合、拡張子をxlsm形式にする必要があります。ファイルを保存する際に出てくる保存ウィンドウで、「Excel マクロ有効ブック(*.xlsm)」を選択するようにしましょう。
背景色をもとにセルをカウントする関数を使用する方法
上記の「背景色をもとにセルをカウントする関数を作成する方法」を実行することで、CountYellowCells関数を使用できるようになります。
この関数は、SUM関数やCOUNT関数などの元からある関数と同様の方法で使用できます。
たとえば、A1からA10までの範囲でカウントを行いたい場合は、以下のように記述します。
= CountYellowCells(A1:A10)
また、複数の範囲を指定することも可能です。
以下の例では、A1からA10までと、C1からC10までのセルにある、背景色が黄色のセルをカウントしています。
= CountYellowCells(A1:A10,C1:C10)
注意点
VBAを使用して独自に作成した関数は、SUM関数やCOUNT関数などの通常の関数とは異なる点があります。
それは、関数を入力した後に参照先が変更されても、再計算が行われない点です。
通常の関数とVBAで作成した関数の違いがわかる例を挙げます。
A1セルからA3セルに数値が入力されています。A5セルにはSUM関数が入力されており、A1からA3までに入力された数値の合計が表示されています。
また、A6セルでは、CountYellowCells関数を使用して、背景色が黄色になっているセル(A2,A3セル)の個数がカウントされています。
ここで、A1セルの数値を変更すると、すぐにA5セルの内容が計算しなおされ、値が変更されます。
しかし、A1セルの背景色を黄色に変更しても、A6セルの値は変更されません。
また、数式タブにある「再計算」ボタンを押しても変わりません。
A1セルの背景色をカウントするためには、A6セルを選択してセルを編集状態にしたあと、再度入力を確定する必要があります。
セルを編集状態にするというのは、ただカーソルをそのセルに当てるだけでなく、ダブルクリックしたり、F2ボタンを押すなどして、セルの内容を書き換えられる状態にすることを言います。
つまり、セルの内容を書き換えられる状態にしてから、再度Enterキーを押すなどしてセルの内容を確定すると、再計算が行われるということになります。
おわりに
本記事では、Excelで色付きのセルをカウントする関数を作成する方法を解説しました。
SUM関数などのメジャーな関数では実現できないことでも、VBAを使用すると実現できる、ということは数多くあります。
マクロやVBAというと難しそうなイメージがあるかもしれませんが、上記のように比較的簡単に実現できることもあるのです。
普段、Excelで機械的な作業を行なっている方は、マクロやVBAを学んでみることで、効率化ができるかもしれません。
ご参考になればと思います。