エクセル実践塾 > エクセル実践塾2016

塗りつぶされているセルの個数を知りたい

 

ユーザー定義関数で求めることができます

ユーザー定義関数(UDF)は、VBA を使用して自分で作成する関数で、Excelの標準関数(例えば SUM や AVERAGE)では対応できない特別な計算や処理を行いたいときに使用します。

ユーザー定義関数は、Excel シート上で関数のように使うことができます。

塗りつぶされているセルの個数を求めるためのユーザー定義関数は、次のようなコードで実現できます。


Function CountCellsWithFillColor(TargetRange As Range) As Long

 Dim Cell As Range

 Dim Count As Long

 Dim RowNum As Long

 Dim ReferanceColor As Long

 

 Count = 0

 

 For Each Cell In TargetRange

  RowNum = Cell.Row

 

  ReferanceColor = Cells(RowNum, 1).Interior.Color

 

  If Cell.Interior.Color = ReferanceColor And ReferanceColor <> RGB(255, 255, 255) Then

   Count = Count + 1

  End If

 Next Cell

 

 CountCellsWithFillColor = Count

End Function

 

@「開発」タブから「Visual Basic」を実行します

 

A「挿入」→「標準モジュール」を追加します

B左図のようなコードで、オリジナルの関数を定義します

この VBA関数 は、指定されたセル範囲内で、A列のセルと同じ塗りつぶし色 を持つセルの個数をカウントするものです。

A列の各セルの色を基準に、その色で塗りつぶされているセルを数えます。

Function CountCellsWithFillColor(TargetRange As Range) As Long

TargetRange は、この関数に渡される セル範囲 です。

この範囲内のセルを調べて、特定の条件に一致するセルをカウントします。

関数は Long 型 を戻り値として返します。

この関数はセルの個数を返します。

 Dim Cell As Range

 Dim Count As Long

 Dim RowNum As Long

 Dim ReferanceColor As Long

 

Cell As Range

ループで各セルを調べるために使う変数です。

Count As Long

条件を満たすセルの個数をカウントするための変数です。

RowNum As Long

各セルの 行番号 を格納します。A列のセルを基準に色を比較するために使います。

ReferanceColor As Long

A列のセルの塗りつぶし色を格納する変数です。これと他のセルの色を比較します。

 Count = 0

 

Count 変数を 0 に初期化します。

この変数で条件に一致するセルの個数をカウントします。

 For Each Cell In TargetRange

For Each ループを使って、指定された範囲 TargetRange 内の 各セル を順番に処理します。

  RowNum = Cell.Row

 

  ReferanceColor = Cells(RowNum, 1).Interior.Color

 

RowNum = Cell.Row

現在のセル Cell の行番号を取得し、それを RowNum に格納します。

ReferanceColor = Cells(RowNum, 1).Interior.Color

A列の対応する行番号 (RowNum) にあるセルの塗りつぶし色を取得し、それを ReferanceColor に格納します。

A列の色を基準に、他のセルの色と比較します。

  If Cell.Interior.Color = ReferanceColor And ReferanceColor <> RGB(255, 255, 255) Then

   Count = Count + 1

  End If

If 文で、次の条件を確認します。

Cell.Interior.Color = ReferanceColor

現在のセルの塗りつぶし色 (Cell.Interior.Color) が、A列の対応する行のセルと 同じ色 かどうかを確認します。

ReferanceColor <> RGB(255, 255, 255)

A列のセルの色が 白色(RGB: 255, 255, 255) でないかどうかを確認します。

白色の場合、塗りつぶしをカウントしないようにしています。

上記の条件が 両方満たされる場合、Count を 1 増やします。

A列のセルと同じ色で塗りつぶされているセルが見つかった場合にカウントします。

 Next Cell

 

次のセルに対して同じ処理を繰り返します。

 CountCellsWithFillColor = Count

End Function

最後に、Count に格納された、条件に一致するセルの個数を 戻り値 として返します。

これが関数の結果となります。

C「関数の挿入」からユーザー定義関数を呼び出せます

D引数として、セル範囲を指定します

Eユーザー定義関数を使った数式も、通常の関数式と同じようにコピーして利用できます

 

Fユーザー定義関数を使った数式の結果を更新する場合は、Ctrl+Alt+F9キーを使います

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 

 

●A列のセルと同じ色で塗りつぶされているセルの個数を表示する、 ユーザー定義関数を作る動画です

関連する他のページ

労働時間を計算するユーザー定義関数を使って、 残業時間を求めるユーザー定義関数を作りたい
既存のユーザー定義関数は、 別のユーザー定義関数内で実行して、 その結果を利用することができます

選択したセル範囲のデータから、一意のものを取り出したい
マクロなら可能です

選択したセル範囲のデータを、一列にまとめたい
10行程度のマクロでも行えます

組み合わせ一覧を表示するマクロを、 要素数と選び出す数を自由に指定できるものにしたい
入れ子構造のマクロでは汎用的にできないので、 再帰処理を使ったマクロにします

ABCの観点別評価の組み合わせパターンを知りたい
入れ子構造のマクロで求めることができます

ドロップダウンリストで選んだデータを、 選んだ直後に、 対応する別データに置換して入力したい
セル値の変化を監視するマクロで実行できます

置換リストを使って、 複数の置換をまとめて行いたい
10行程度のマクロで、 置換リストを使った一斉処理が可能です

セルに入力されている文字列を、そのシート名にしたい
簡単なマクロで実現できます

マクロ実行の対象範囲を固定したい
セルやセル範囲は、 Rangeで指定できます

選択中のセル範囲に含まれる空セルを、 マクロ処理の対象から除外したい
空セルでないことを条件に、 マクロを実行するよう、 If文を追加します

選択中のセル範囲に対してのマクロ実行結果を、 別のセルに表示したい
Offsetを使うと、 対象のセルの位置を行列単位でずらすことができます

選択中のセル範囲に対するマクロを作りたい
For Each〜Nextで、 選択中のセル範囲(Selection)に対する処理を記述します