07
NOVEMBER
ウェブTUESDAY 2017 / 11 / 7
ExcelVBAを使って、セルの塗りつぶしの色情報を取得するExcel関数を作る
Text by Hiroyuki Matsumoto
前提・予備知識
表計算ソフトのエクセルにはさまざまな計算処理等をおこなう便利な関数(標準関数)があります。関数では処理できないような複雑な処理の場合は Excel VBA(Excelマクロ)というプログラムを作ってデータを処理させることもできます。
本題
Excelの標準関数には色情報を取得するための関数はありません。ですが、Excelマクロ(ExcelVBA)さえ有効ならば色情報を取得する関数を自分で作ることができます。
背景色の場合、 範囲.Interior.Color でRGBの値が参照できます。下記の関数では、背景色の赤要素の値を 0 ~ 255 の範囲で取得します。
検証環境:Excel2016 32bit版
Function get_bg_red(ByVal theRange As Range) As Integer Dim n As Long, r As Integer, g As Integer, b As Integer n = theRange.Interior.Color r = n Mod 256 n = (n - r) / 256 g = n Mod 256 n = (n - g) / 256 b = n get_bg_red = r End Function
標準関数のように =get_bg_red(調べるセル) のように使います。
※白色の赤成分は255で正常です
注意点
通常、関数はセルの内容が変更された場合、影響する他のセルの値も自動的に再計算します(自動再計算機能)。ですがこの機能はセルの値しか監視していないため、今回のように色を対象とした関数を作った場合、色を変更しても値が再計算されません。
そのため下記のように後から色を変更した場合には正常に計算されませんのでご注意ください。
※この色の正しい赤成分の値は244です
なんでこんな記事を?ウェブ関係なくね?
先日クライアント様の社内で使っているエクセルファイルをこーゆー処理で自動化するようにしたからです。色によってしか男性/女性の判別ができなかったんで作りました。
そういえば僕がカミナリに入社して最初のお仕事は、某飲食店の原価計算をするエクセルファイルでした。
原価計算システムをちゃんとしたシステム屋さんに見積もりをお願いしたら軽く3桁を超えたということで私にお話が来ましたが、「エクセルで作ってとりあえず動く程度でいいんだったら10~20くらいでできますよー」と作りました(うろ覚え)。
社内でエクセルファイルを毎回手作業で処理している等ありましたら、おそらく自動化が可能ですのでご相談ください。
TEXT by
松本 博之(まつもとひろゆき)
1978年、鳥取県米子市生まれ。
株式会社マジックワード WEBシステムの開発・運用を担当。
WordPressの実績多数。表面的な使用方法を把握するだけでなく、WordPressのソースコードを読み解いて対応できます。
国家資格の応用情報処理技術者をなんとなくとりました。