VBA Hamster編
【1】ユーザフォームで棒グラフを描く
ワークシートにグラフを描いてその画像をユーザフォームに貼り付ける手も考えたが、いい手を見つけたのでこちらを採用しました。
Office 2000 Web Chart コンポーネント APIを使用すると結構楽に実現できましたが、EXCEL2007でActiveX初期化警告メッセージが
出るようになるのは誤算でした。
さて、とりあえず簡単な棒グラフを書く例を示します。ツールボックスのその他コントロールで
Microsoft Office Chart 9.0をユーザフォームに貼り付けます。処理の概要は、まずデータを1次元配列でChartSpace1へ渡す必要があります。
他にはDBレコードセットやカンマ区切りのデータでも渡せるとのこと。残念ながら2次元配列はエラーなります。グラフの要素を
系列名、項目名、各系列のデータをセットしたテーブルをSetDataメソッド等で渡すだけです。後で気づきましたが、系列数が
多い場合は一旦2次元配列に格納してChartSpace1へ渡す直前に1次元配列にコピーして渡すこともできます。
'以下ユーザフォームに記述
Option Explicit
Private Sub UserForm_Initialize()
'■データを作成
Dim T系列名(1)
Dim T項目名(3)
Dim T系列data1(3)
Dim T系列data2(3)
T系列名(0) = "支出"
T系列名(1) = "収入"
T項目名(0) = "1月"
T項目名(1) = "2月"
T項目名(2) = "3月"
T項目名(3) = "4月"
T系列data1(0) = 100
T系列data1(1) = 120
T系列data1(2) = 140
T系列data1(3) = 150
T系列data2(0) = 150
T系列data2(1) = 160
T系列data2(2) = 170
T系列data2(3) = 180
'■データをチャートへ設定
Dim MyChart
Dim SCol1, SCol2
Dim C定義
'定数を参照設定
Set C定義 = ChartSpace1.Constants
' 凡例の表示を表示する
ChartSpace1.HasChartSpaceLegend = True
' Chartspace1 にグラフを追加します。
Set MyChart = ChartSpace1.Charts.Add
' 折れ線グラフを指定する。
MyChart.Type = C定義.chChartTypeColumnClustered
' グラフに系列名データを渡す。
MyChart.SetData C定義.chDimSeriesNames, C定義.chDataLiteral, T系列名
' グラフに項目名データを渡す。
MyChart.SetData C定義.chDimCategories, C定義.chDataLiteral, T項目名
' グラフに系列データ1を渡す。
Set SCol1 = MyChart.SeriesCollection(0)
SCol1.SetData C定義.chDimValues, C定義.chDataLiteral, T系列data1
' グラフに系列データ1を渡す。
Set SCol2 = MyChart.SeriesCollection(1)
SCol2.SetData C定義.chDimValues, C定義.chDataLiteral, T系列data2
End Sub
棒グラフ