HOME > 即効テクニック > Excel VBA > ユーザーフォーム関連のテクニック > Office Web Componetをユーザフォームで使う - ChartSpaceコントロール

即効テクニック

ユーザーフォーム関連のテクニック

Office Web Componetをユーザフォームで使う - ChartSpaceコントロール

(Excel 2000)
サンプルではOffice Web Componet(OWC)のうち、ChartSpaceコントロールをユーザフォーム上で使用し、チャートを作成します。
ChartSpaceコントロールのチャートはデータ ソースにSpreadSheet,DataSource,など他のOWCコントロールを指定するほか、コンマ区切りデータや1次元配列から作成できます。

※DataSourceTypeの種類

	chDataSourceTypePivotlist
	chDataSourceTypeRecordset
	chDataSourceTypeSpreadsheet
	chDataSourceTypeUnknown

(OWC ChartSpaceControlを使用可能にするには)
VBEでユーザフォームが選択された状態で”ツール”メニューから”その他のコントロール”をクリック、”コントロールの追加”ダイアログで、”Microsoft Office Chart 9.0”を選択して”OK”。”ツールボックスに”表示されたアイコンを通常のコントロールと同様ユーザフォームにドラッグ&ドロップで貼り付けてください。

1.ワークシート上のデータを配列に取得してチャートを作成
(前提)ユーザフォーム、ChartSpaceコントロール
Private Sub UserForm_Initialize()

Dim MyChart As WCChart
Dim Dat As Range
Dim DCat As Variant, DValue As Variant
Dim SCol As WCSeries

Set Dat = ActiveSheet.Cells(1, 1).CurrentRegion
Set Dat = Dat.Offset(1).Resize(Dat.Rows.Count - 1)
'アクティブシートのデータ範囲1行目を系列名、2行目をデータとして
'取得し、位置次元配列に変換
DCat = Application.WorksheetFunction.Transpose(Dat.Columns(1))
DValue = Application.WorksheetFunction.Transpose(Dat.Columns(2))

With Me.ChartSpace1
Set MyChart = .Charts.Add
    
    With MyChart
    
    'データ系列の追加
    Set SCol = .SeriesCollection.Add
    .Type = chChartTypeLine '折れ線グラフの指定
    
    'Chartオブジェクトに対して項目名をセット
    .SetData chDimCategories, chDataLiteral, DCat
    
    'Seriesオブジェクトに対してデータのセット
    .SeriesCollection(SCol.Index).SetData _
        chDimValues, chDataLiteral, DValue
    
    '※SetDataメソッド(Dimension, DataSourceIndex, DataReference)
    ' DataSourceIndexにchDataLiteralを指定した時1次元配列、
    ' またはコンマ区切りデータを指定できます
    End With

End Sub
2.ユーザフォーム上にSpreadSheetコントロールを配置してチャートのDataSourceに指定
(前提)ユーザフォーム、ChartSpaceコントロール、SpreadSheetコントロール
Private Sub UserForm_Initialize()

Dim MyChart As WCChart
Dim Dat As Range
Dim OWCRng As OWC.Range
Dim Addr As String

'グラフのもとデータをアクティブシートから取得
Set Dat = ActiveSheet.Cells(1, 1).CurrentRegion
Addr = Dat.Address(False, False)

'SpreadSheetコントロールにデータセット
Set OWCRng = Spreadsheet1.ActiveSheet.Range(Addr)
OWCRng.Value = Dat.Value

With Me.ChartSpace1
    'チャートのデータソースをSpreadSheetコントロールに設定
    Set ChartSpace1.DataSource = Spreadsheet1

    Set MyChart = .Charts.Add
    With MyChart
    .Type = chChartTypeLine '折れ線グラフ
    'SpredSheetコントロール上のデータ範囲を指定して項目、データをセット
    .SetData chDimCategories, 0, OWCRng.Columns(1).Address
    .SeriesCollection(0).SetData chDimValues, 0, OWCRng.Columns(2).Address
    End With

End With

End Sub