Excelで非常によくいただく要望ながら、標準の機能では行うことのできない操作があります。
セルの色を指定したデータ抽出です。
例えば、何らかのリストがあって、そのリストを目視確認しながら気になるデータのセルに色をつけ、あとから色をつけたデータだけを表示するようにフィルタリングしたい、といった要望をいただくのです。
残念ながら現在のExcelではそういった利用方法を想定していないので、該当するコマンドなどはありません。
どうしてもセル色を指定してデータの絞込みを行いたいということであれば、セル色を取得するユーザー定義関数を作成し、そのユーザー定義関数を使ってセルの色を別の列に表示させ、その列を使ってフィルタリングをしましょう。
Function CellColor(objCell As Range) As Integer Application.Volatile
CellColor = objCell.Interior.ColorIndex
End Function
上記のコードを標準モジュールに貼り付け、例えばB2セルに「=CellColor(A2)」という計算式を入力すると、B2セルにA2セルの塗りつぶし色のColorIndex値が表示されるようになります。
行っている処理としては、引数で指定されたobjCellの、Interior.ColorIndexプロパティ値を返しているだけです。
セルの色を指定してデータの抽出をするのならば、このCellColor関数を入力した列でフィルタを実行すればいいわけです。
▼サンプルファイル(001873.xls 31KByte)ダウンロード
サンプルファイルでは、B列にCellColor関数を入力してA列のセルの色を表示するようにしています。赤色で塗りつぶされている行だけを抽出するのならばオートフィルタで「3」を指定すればいいわけです。
何色がいくつの数値なのかについては、「ColorIndexプロパティ値一覧」を参照してください。
「Application.Volatile」というステートメントは、「CellColor = objCell.Interior.ColorIndex」というステートメントだけでは、セルの色を変更してもCellColor関数で返される値がすぐに変更されないのを防ぐため入れています。
「Application.Volatile」という記述によって、セルの色を変更してから[F9]キーを押すなどして再計算をすれば、CellColor関数を利用しているセルの値が変更されます。
ただしこのユーザー定義関数を利用して、セルの塗りつぶし色を表示させ、その値を利用してフィルタをするというこの方法、大きな問題もあります。
サンプルファイル程度の利用ならば問題にはなりませんが、大量にCellColor関数を使用すると、再計算をした場合にかなりの時間がかかるようになってしまうのです。
そもそもExcelでは書式からデータ抽出をしたり、何らかの計算をするといったことは想定していないのですから、Excelの特性を理解した運用をする方が賢い選択だと思います。
たとえば今回のようなケースならば、セルに直接色をつけるのではなくB列に何らかのデータを入力して、B列を見てA列の色を変更するような条件付き書式を設定し、フィルタにはB列を利用するといった使い方をする方がいいと思うのです。
- Newer:Vistaに続きOffice2007の発売も来年に延期
- Older:Web2.0 BOOK
Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » セル色を指定してデータ抽出