[Excel]セルの背景色や文字色を数値コード化する

# 留意点
- 「4.0マクロ関数」と呼ばれるものを使います。
    - 一応マクロなので，関数を保持したまま保存する場合はマクロ有効化ブック（xlsm）で保存する必要があります。

# 想定している状況
Excelで書かれたデータがあって，そのデータをcsvにして分析したいという状況があるとします。

そのExcelのデータにおいて，**セルの背景色や文字色に意味があり，色を数値化してデータにしたい**という状況であるとします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/201348/0a4953a3-f044-9e9f-d6ca-75341965ca18.png)


# 対応方法

マクロ関数`GET.CELL(番号,範囲)`を使います。


## 背景色のコード化

1.メニューの「数式」タブの「名前の定義」をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201348/d242615c-510e-60db-db60-2c20da839e57.png)

2.「名前」には`background_color`などと任意の名前を，「参照範囲」には`=GET.CELL(63,[参照したい範囲の左上のセル]) +now()*0`を入れます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/201348/a3a8c301-7515-d86b-2078-2f2208be4db2.png)

3.背景色や文字色の有無を表現する列を新たに用意します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201348/a0857918-415b-7578-fdab-8d0e8cd66ed9.png)


4.その列の左上に`=background_color`のように先ほど定義した名前を指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201348/07e77e70-f3dd-f6f4-f817-6bddc8aaa6fa.png)

5.`=background_color`をコピーしていきます。マクロ関数の範囲指定が相対参照であるため，コピーによって対象範囲も変化していきます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201348/7ffdc909-dd1a-eea8-59fe-6dcc74046429.png)

これで背景色を数字のコードに変換することができました。


## 文字色のコード化
マクロ関数`GET.CELL(63,範囲)`は「背景色の取得」という機能を果たしましたが，63を24に変えれば「文字色の取得」という機能になります。

それ以外は上記の手順と同様の手順で文字色もコード化することができます。

名前を定義して…
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201348/10759759-6ee3-6e99-78e5-38f27682e65d.png)

定義した名前を指定する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201348/794175f8-132f-bab4-ed1f-3f3ace6e9a61.png)

これだけです。


# GET.CELL()に関して

`GET.CELL(番号,範囲)`の各番号の機能をまとめておきます。

番号
1　絶対参照
2　セルの行番号
3　セルの列番号
4　=TYPE(範囲)と同じ値
5　セル内の内容
6　セル内の数式を文字列として返す
7　セルの表示形式
8　セルの配置を数値で返す
　　　1　標準　2　左詰　3　中央　4　右詰　5　フル　6　均等　7　選択範囲で中央
9　セルの左端の罫線の種類を数値で返す
　　　0　なし　1　実線　2　太線　3　破線　4　点線　5　極太線　6　二重線　7　細線


10　セルの右の罫線の種類を数値で返す
　　　0　なし　1　実線　2　太線　3　破線　4　点線　5　極太線　6　二重線　7　細線
11　セルの上の罫線の種類を数値で返す
　　　0　なし　1　実線　2　太線　3　破線　4　点線　5　極太線　6　二重線　7　細線
12　セルの下の罫線の種類を数値で返す
　　　0　なし　1　実線　2　太線　3　破線　4　点線　5　極太線　6　二重線　7　細線
13　セルのパターンを数値で返す
14　ロックをTUREかFALSEで返す
15　非表示をTUREかFALSEで返す
16　セルの幅
17　セルの高さをポイントで返す
18　フォントの名前
19　フォントのサイズをポイントで返す

20　フォントのボールドをTUREかFALSEで返す
21　フォントのイタリックをTUREかFALSEで返す
22　フォントの下線をTUREかFALSEで返す
23　フォントの文字の打消線をTUREかFALSEで返す
24　フォントの色を数値で返す
25　フォントのアウトラインをTUREかFALSEで返す
26　フォントのシャドウをTUREかFALSEで返す
27　改ページ指定を数値で返す
　　　０　なし　１　行方向　２　列方向　３　行、列方向
28　行方向のアウトラインレベルを数値で返す
29　列方向のアウトラインレベルを数値で返す

30　要約行をTUREかFALSEで返す
31　要約列をTUREかFALSEで返す
32　アクティブシートの名前
33　全文字列表示をTUREかFALSEで返す
34　セルの左端罫線を数値で返す
35　セルの右端罫線を数値で返す
36　セルの上端罫線を数値で返す
37　セルの下端罫線を数値で返す
38　前景色を数値で返す
39　背景色を数値でかえすスタイル

40　セルのスタイル
41　セル内の数式
42　ウインドウの左端からセル左端の水平距離をポイントで返す
43　ウインドウの上端からセル上端の垂直距離をポイントで返す
44　ウインドウの左端からセル右端の水平距離をポイントで返す
45　ウインドウの上端からセル下端の垂直距離をポイントで返す
46　文字列メモをTUREかFALSEで返す
47　サウンドメモをTUREかFALSEで返す
48　数式ならTRUEを定数ならFALSEを返す
49　配列の一部かどうかをTUREかFALSEで返す

50　セルの内容の縦位置を数値で返す
　　　1　上詰　2　中央　3　下詰
51　セルの文字の方向を数値で返す
　　　1　横書　2　縦書　3　下から上へ横書　4　上から下へ横書
52　セルの接頭辞または文字列の配置
53　セルの内容を表す文字列

63　セルの背景色を数値で返す

# 参考
- セルの色を判別する方法ってありますか？ - エクセル上で何色かに... - Yahoo!知恵袋  
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1210657302
- GET.CELL　エクセル 4.0 マクロ  
http://excel4macro.blog86.fc2.com/blog-entry-167.html