EXCEL VBA におけるバブルチャートのデータ系列

 散布図におけるオブジェクトは以前の記事 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

バブルチャートの初期状態

 下図は何も書式設定をしていない,初期状態のバブルチャートである.ここからさまざまな「お化粧」を施していくことになるが,今回はここまでにしておこう.

初期状態のバブルチャート
初期状態のバブルチャート

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください