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

指定色で塗りつぶされているセルの個数を求められる、ユーザー定義関数を作りたい

 

ユーザー定義関数は、その処理を拡張できます

セルを塗りつぶしている色は、標準の関数では判別できませんが、ユーザー定義関数ならそれが可能です。

そのユーザー定義関数を利用して、セル範囲から該当個数まで求められるユーザー定義関数を作ることもできます。

Excel 2013/2010/2007

 

@前号で作成したCellColor関数と同じモジュールウィンドウに、該当するセル個数まで求められるCellColorIf関数を作る

「function CellColorIf(範囲, 条件色セル)」

というコードを入力し、

「範囲」と「条件色セル」の2つの引数を持つCellColorIf関数を作ります。

AEnterキーを押すと、末尾に「End Function」が追加される

 

B次のようなコードを入力して、ユーザー定義関数が、標準の関数と同じように自動再計算されるようにする

Application.Volatile

C次のようなFor Each文を使って、指定範囲内のセルすべてと、指定セルの塗りつぶし色を比較する

     For Each cc In 範囲
       If CellColor(cc) = CellColor(条件色セル) Then kosu = kosu + 1
     Next cc
ccは、範囲内の個々のセルを、
kosuは、塗りつぶし色の一致した数の累計です。

CellColorは、前号で作成した、指定セルの塗りつぶし色を数値で表すユーザー定義関数です。

D次のようなコードで、累計した一致個数を、CellColorIf関数の値として返せるようにする

CellColorIf = kosu

Function CellColorIf(範囲, 条件色セル)

     Application.Volatile

     For Each cc In 範囲
       If CellColor(cc) = CellColor(条件色セル) Then kosu = kosu + 1
     Next cc

     CellColorIf = kosu

End Function
 

左のコードが、CellColorIf関数のコード全文ですが、CellColorはユーザー定義関数なので、前号で作成した次のようなコードが別に必要です(左上のモジュールウィンドウの上部に作成してあるものです)。

Function CellColor(セル)

    Application.Volatile

    CellColor = セル.Interior.Color

End Function
 

E作成したCellColorIf関数は、標準の関数と同じように使える

 

F1つ目の引数には、検索対象となるセル範囲を指定する

※作例では、テーブルの表が検索対象となっているので、構造化参照でセル範囲が表示されています。通常のセル番地による指定も行えます。

G半角のカンマを挟んで、検索条件となる塗りつぶし色のセルを指定する

HCellColorIf関数を完成させれば、指定セルと同じ塗りつぶし色のセルの個数が表示される

 

関連する他のページ

商品名や単価を、商品一覧から表引きしたい
表引きする表にあらかじめ適当な名前を付けておけば、VLOOKUP関数で簡単に表引きできます

数式に使っている、セル範囲につけた名前を変更したい
「数式」タブの「名前の管理」ボタンで、セル範囲につけた名前などの変更を行えます

商品番号を入力すると、自動的に商品名が表示されるようにしたい
VLOOKUP関数式を設定すれば、商品リストからの表引きを行えます

商品番号を入力すると、自動的に商品名以外の情報も表示されるようにしたい
商品名などを表示するセルが、表引きの対象リストと同じ並びになっていれば、商品名のVLOOKUP関数式をコピーして使えます

あとから見てもわかりやすいVLOOKUP関数式にしたい
「範囲」として指定するセル範囲に、あらかじめ適当な名前を付けておけば、VLOOKUP関数式でもそれを使えるのでわかりやすくなります

型番を入力すると、小売価格が表示されるようにしたい
検索するべき型番が横(行)方向に並んでいる場合にはHLOOKUP関数を使います

商品コードが空欄のとき、 商品名や単価の欄にエラー値を表示させたくない
IFERROR関数を使えば、エラー値を表示させないようにできます

エラー値 #N/A を表示したくない
IFERROR関数を使えば、#N/Aなどの数式エラーをトラップできます

2つの型番リストを参照して、小売価格を調べたい
IFERROR関数を使って、1つめの参照でエラーとなったときに、2つめのリストを参照するようにします

マクロ有効ファイルって何?
マクロを含むブックは、マクロ有効ファイル(マクロ有効ブック)として保存しなければ、マクロが失われてしまいます

ブックにたくさんのシートがあり、それぞれのB2セルに入力してあるデータを、それぞれのシートの名前にしたい
For Each...Next ステートメントを使えば、編集中のブックに含まれるすべてのシートを対象にして、同じ処理を実行することができます