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

指定色で塗りつぶされているセルの個数を求めたい

 

塗りつぶし色を数値で表すユーザー定義関数を作れば、数式で求めることができます

セルを塗りつぶしている色は、標準の関数では判別できません。

そこで、それを判別できるユーザー定義関数を作って、COUNTIFなどの関数と組み合わせます。

Excel 2013/2010/2007

 

@「開発」タブの「Visual Basic」をクリック

※「Excelのオプション」の「リボンのユーザー設定」で「開発」にチェックマークを入れれば、「開発」タブが表示されるようになる

 

A編集中のブック名が記されているVBAProjectを右クリックして、「挿入」→「標準モジュール」を選ぶ

B新しいモジュールウィンドウが表示される

Cモジュールの名前は、「オブジェクト名」で変えることができる

D「function CellColor(セル)」と入力

EEnterキーを押すと、末尾に「End Function」の行が追加され、ユーザー定義関数の作成を行えるようになる

「CellColor」がユーザー定義関数の名前となります。

F「application.vo」と入力して、候補の一覧から「Volatile」を選ぶ

「Volatile」を選択して、Tabキーを押すと、選んだものが入力されます。

GEnterキーを押す

「application」の綴りが間違いなければ、その表示が「Application」に変わります。

「Application.Volatile」は、ユーザー定義関数による数式を、標準の関数式と同じように自動再計算させるためのコードです。

H次の行に、
「cellcolor = セル.interior.color」
と入力

I綴りに間違いがなければ、
表示が
「CellColor = セル.Interior.Color」
に変わる

「セル.Interior.Color」は、CellColor関数で指定したセルの色番号を表わすコードです。

「CellColor」と「=」でつなぐことにより、その色番号をCellColor関数で取得できるようになります。

Jユーザー定義関数も、標準の関数と同じように一覧から選べる

K色番号を調べたいセルを引数として指定

LCellColor関数式を完成させると、指定セルの色番号が表示される

MCOUNTIF関数と組み合わせる場合は、色番号を求めるCellColor関数式を、一覧表にも追加する

NCOUNTIF関数を使えば、数値で表された塗りつぶし色を検索条件として、セル範囲からその個数を求めることができる

●ユーザー定義関数はマクロの一種なので、Excelマクロ有効ブックとして保存し直すことになる

「VBプロジェクト」は、ユーザー定義関数を含めた、マクロ関連の機能を指します。

 

 

関連する他のページ

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

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

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

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

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

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

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

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

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

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

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