2.20.2011

VBA Vol.1 (グラフを塗り分けるマクロ)


ExcelのVBAでグラフの色をきれいに描こうと試みた。

なぜならデフォルトのExcelのグラフの色はイケてないからだ。
あとはたくさんのデータ系列があるときにはいちいち1つずつ書式設定なんてやってられないから。

どうせなら最近流行りの色鮮やかな感じにしようと思い、
赤 橙 黄 緑 青 藍 紫って感じに波長の長い順に並べるアルゴリズムにしようと考えた。
名付けてRainbowGraph。虹色のグラフ。

Red, Green, Blueの値の混ぜ具合で出力の色が変わるRGBっていう関数を使った。
RGB(red, green, blue)っていう風に3色の濃さを引数にしてる。
引数はそれぞれ0 - 255の整数。

赤から順に虹色に変化させるには、下の表の順番でRGBの引数を変えていかなきゃいけない。

Red Green Blue Result
255 0 0 Red
255 255 0 Yellow
0 255 0 Green
0 255 255 Cyan
0 0 255 Blue
255 0 255 Magenta
255 0 0 Red

ちなみにRGB(0,0,0)なら黒、RGB(255,255,255)なら白。光の3原色と一緒。

そしてできた。アルゴリズム(といえるほど高級なものでもない)は以下の通り。

まず、赤から紫までいって赤に戻るまでのRGBの整数の組み合わせは256 * 6 = 1536通りある。6の由来は、表の行数 - 1個分。最初は赤って決めてるから7 - 1 = 6てこと。

そこで1536 / (データ系列の数)ずつインクリメントしてって、その結果を256で割った商を6通りに場合分けし、RGBのどの引数を増やす/減らすか選ぶ。そして256で割った時の剰余をRGBの引数のどれかに足して/引いてからそれぞれのデータ系列の色に指定するっていう寸法。

これはお気に入りになった。
ちなみに最初の図形はGaussian波形で、ピークを細かく増やしていったGaussianを計200本描いてこれにマクロを適用したもの。

デフォルトと比べてみると、その違いは歴然。
下の図の1つ目がデフォルトで作成しっぱなしの方で、2つ目がマクロ使ったあと。



自分のサーバーがないために、保存用も兼ねて下に無理やりソースコードを入れた。
誰か使ってくれないかな。自己責任で。グラフきれいになるし!

ちなみにExcelでグラフを作成してそれが表示されてる状態じゃないと使えません。散布図でね。
実行するとなんか聞かれるけど、「はい」って言っとけば起動する。たぶん。

あと、残念ながらExcel2003だと載せた図ほど色のグラデーションがきれいじゃなくなる。

2 件のコメント:

  1. グットやないかーい!
    てか、綺麗になるもんやね。

    わしもソーシャルネットワーク見てきた!
    久しぶりになんかアプリ作りたくなったw
    てことでなんか作ろうかw

    返信削除
  2. >Furukawa
    あざっす^^レインボーですw

    ソーシャルネットワークけっこ面白いね。
    なんか作ろう!HTML5の流れに乗じて!w
    見た目におもろいの作りたいねー

    てかBloggerのアカウント持ってたんか!

    返信削除