散布図におけるオブジェクトは以前の記事 VBAから見たEXCELの散布図 で取り上げた.今回はバブルチャートのデータ系列を調べたので備忘録がてら公開する.
データベースから全国の市区町村の財務状況をダウンロード
SQL Server に格納したテーブルを結合して以下のクエリを実行する.データベースは 全国の市区町村の財政 で作成済みである.
SELECT M_City.CityCode AS '市区町村コード' , M_City.City AS '市区町村' , M_City.PrefectureCode AS '都道府県コード' , M_City.Prefecture AS '都道府県' , M_City.Region AS '地方' , Balance.Year AS '年度' , P.A1101_TotalPopulation AS '総人口' , P.A05101_PopulationChangeRate AS '人口増減率' , Balance.D2201 AS '財政力指数' , FiscalPower.D2203 AS '経常収支比率' , DeptRatio.D2211 AS '実質公債費比率' , LocalBonds.D3205 AS '地方債現在高' FROM M_City INNER JOIN dbo.D2201 AS Balance ON M_City.CityCode = Balance.CityCode INNER JOIN dbo.D2203 AS FiscalPower ON Balance.CityCode = FiscalPower.CityCode AND Balance.Year = FiscalPower.Year INNER JOIN dbo.D2211 AS DeptRatio ON Balance.CityCode = DeptRatio.CityCode AND Balance.Year = DeptRatio.Year INNER JOIN dbo.D3205 AS LocalBonds ON Balance.CityCode=LocalBonds.CityCode AND Balance.Year = LocalBonds.Year INNER JOIN dbo.T_Population AS P ON Balance.CityCode = P.CityCode AND Balance.Year = P.Year;
ユーザーインターフェースでの操作をマクロ記録
「挿入」「グラフ」「バブル」
「挿入」「グラフ」「バブル」と進む.空のグラフが挿入される.
「データの選択」
プロットエリアを右クリックして「データの選択」を選ぶ.
データ系列の指定
下図のように系列名,系列 X の値,系列 Y の値,系列のバブルサイズと入力する空欄が 4 つある.
それぞれが Series オブジェクトの Name プロパティ, XValues プロパティ, Values プロパティ, BubbleSizes プロパティに該当する.
Series オブジェクトの 3 番目の次元は BubbleSizes プロパティ
上記プロパティのうち Name プロパティ以外はすべて Variant 型であり,一次元配列を入力できる.逆に Series オブジェクトのプロパティで Variant 型を返すのはこの 3 つしか存在しない.
4 番目の次元として時間を加えてバブルチャートの動画を作成する場合,EXCEL の Series オブジェクトが保持できる次元を超えるため,テーブルは第一正規形を維持できなくなる.
EXCEL 以外の R や Python では最初から 3 次元のグラフを作成できるのだが,EXCEL では 2 次元の XY 平面上でしか表現できないため, Z 軸の大きさを仮想的にバブルサイズで代用している.
今後 EXCEL が 3 次元グラフを作成できるようになるのか,あるいは Series オブジェクトに時間軸専門の (.TimeLine) プロパティを追加実装できるようになるのかは不明である.
人間が認知できる次元の上限は時間を含めて 4 つまでであろう.今後 VR 技術の進歩により立体視がごく普通の環境になった時には, XYZ 空間内にバブルサイズと時間を加えた 5 次元の表現が可能となるのかもしれない.
それ以上の次元表現については,ごく一部の特殊な空間認知能力を持つ人間しか理解できない世界となるだろう.次善の策として,色彩や透明度,テクスチャなどで表現する方法も考えられる.
マクロ記録の結果
下記が記録されたマクロの記録である.9 行目から 12 行目は無視して構わない.重要なのは 14 行目から 17 行目のプロパティ名である.
Sub Macro1() ' ' Macro1 Macro ' ' Sheets("Sheet1").Select ActiveSheet.Shapes.AddChart2(269, xlBubble).Select Application.CutCopyMode = False Application.CutCopyMode = False Application.CutCopyMode = False Application.CutCopyMode = False ActiveChart.SeriesCollection.NewSeries ActiveChart.FullSeriesCollection(1).Name = "=Sheet2!$D$2" ActiveChart.FullSeriesCollection(1).XValues = "=Sheet2!$G$2:$G$180" ActiveChart.FullSeriesCollection(1).Values = "=Sheet2!$I$2:$I$180" ActiveChart.FullSeriesCollection(1).BubbleSizes = "=Sheet2!$L$2:$L$180" End Sub
バブルチャートの初期状態
下図は何も書式設定をしていない,初期状態のバブルチャートである.ここからさまざまな「お化粧」を施していくことになるが,今回はここまでにしておこう.