• カミナリツイッターカミナリtwitter
  • カミナリフェイスブックカミナリfacebook
  • カミナリインスタグラムカミナリinstagram

山陰の情報を発信するカミナリ

ナビ

07

NOVEMBER

ウェブTUESDAY 2017 / 11 / 7

ExcelVBAを使って、セルの塗りつぶしの色情報を取得するExcel関数を作る

前提・予備知識

表計算ソフトのエクセルにはさまざまな計算処理等をおこなう便利な関数(標準関数)があります。関数では処理できないような複雑な処理の場合は 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で正常です

 

サンプルファイル sample.xlsm

注意点

通常、関数はセルの内容が変更された場合、影響する他のセルの値も自動的に再計算します(自動再計算機能)。ですがこの機能はセルの値しか監視していないため、今回のように色を対象とした関数を作った場合、色を変更しても値が再計算されません

そのため下記のように後から色を変更した場合には正常に計算されませんのでご注意ください。

 

※この色の正しい赤成分の値は244です

 

なんでこんな記事を?ウェブ関係なくね?

先日クライアント様の社内で使っているエクセルファイルをこーゆー処理で自動化するようにしたからです。色によってしか男性/女性の判別ができなかったんで作りました。

 

そういえば僕がカミナリに入社して最初のお仕事は、某飲食店の原価計算をするエクセルファイルでした。

原価計算システムをちゃんとしたシステム屋さんに見積もりをお願いしたら軽く3桁を超えたということで私にお話が来ましたが、「エクセルで作ってとりあえず動く程度でいいんだったら10~20くらいでできますよー」と作りました(うろ覚え)。

 

社内でエクセルファイルを毎回手作業で処理している等ありましたら、おそらく自動化が可能ですのでご相談ください。

 

松本博之隠しプロフィール画像

TEXT by

松本 博之まつもとひろゆき)

1978年、鳥取県米子市生まれ。
株式会社マジックワード WEBシステムの開発・運用を担当。

この人が書いた他の記事を読む