重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

エクセルを使うのだったらそのままグラフを表示させればよい。
と思われる方が多いだろうと思いながら質問させていただきます。

エクセル上でフォームを作成し、その上へMSchartコントロールを貼り付けます。
そして、現在アクティブになっているシートのA1~A20のデーターをもとにグラフを表示させたいと思っています。

この時、A1~A20のデーターを直接MSchartで読み込む方法がありますでしょうか。

よろしくお願いいたします。

A 回答 (2件)

> やはり、一度、配列にコピーするしかなさそうですね。



#1 ご回答に補足します。Excel のシート自体が2次元配列のようなものです
から、下記のようなソースがご希望に近いのかもしれません。

Private Sub UserForm_Initialize()
  
  ' Activesheet にテストデータを用意
  Dim r As Range
  Dim n As Double
  With ActiveSheet
    .Cells.Delete
    .Range("A2:A11").Formula = "=""ITEM""&TEXT(ROW()-1,""00"")"
    .Range("B1:D1").Formula = "=""DAT""&COLUMN()-1"
    n = 1
    For Each r In .Range("B2:D11").Cells
      r.Value = n
      n = n + 1
    Next
  End With
  
  ' MSChart コントロールに表示する
  With Me.MSChart1
    .ChartType = VtChChartType2dBar
    .ChartData = Range("A1:D11").Value '<-- Value で配列を渡す
    .TitleText = "Sample Chart"
    .ShowLegend = True  ' 凡例の表示
  End With

End Sub

ワークシート上のデータ変更と連動させたいなら、WithEvents で Change
イベントを利用します。Userform1 を vbModeless 表示してデータを修正
してみて下さい。


Private WithEvents sh As Worksheet
Private m_rDataTable As Range

Private Sub UserForm_Initialize()
  
  Set sh = ActiveSheet
    
  ' Activesheet にテストデータを用意
  Application.EnableEvents = False
  Dim r As Range
  Dim n As Double
  With sh
    .Cells.Delete
    .Range("A2:A11").Formula = "=""ITEM""&TEXT(ROW()-1,""00"")"
    .Range("B1:D1").Formula = "=""CAT""&COLUMN()-1"
    n = 1
    For Each r In .Range("B2:D11").Cells
      r.Value = n
      n = n + 1
    Next
  End With
  Application.EnableEvents = True
  
  ' MSChart コントロールに表示
  Call GetDataRange
  Call ShowChart

End Sub

' // データ範囲( Range )をモジュールレベル変数にセットする
Private Sub GetDataRange()
  Set m_rDataTable = sh.Range("A1").CurrentRegion
End Sub

' // MSChart コントロールに表示する
Private Sub ShowChart()
  With Me.MSChart1
    .ChartType = VtChChartType2dBar
    .ChartData = m_rDataTable.Value
    .TitleText = "Sample Chart"
    .ShowLegend = True  ' 凡例の表示
  End With
End Sub

' // Worksheet の Change イベント
Private Sub sh_Change(ByVal Target As Range)
  If Not Intersect(Target, m_rDataTable) Is Nothing Then
    Call GetDataRange
    Call ShowChart
  End If
End Sub
    • good
    • 0
この回答へのお礼

まだ試せていませんが、詳細なソース助かります。
参考にさせていただきます。
ありがとうございました。

お礼日時:2009/07/27 06:37

参照設定


エクセルVBEの画面で、ツールー参照設定ーMS Chart Control 6.0
するとツールボックスにMSチャートのアイコンが増える。
それをUserForm1の上にD&D
ーー
データ
シートのセルA1:A10の値を配列に入れる。
グラフの種類は
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode …
に解説がある。
グラフの種類は下記より選択
' VtChChartType3dBar '3 次元バー
' VtChChartType2dBar '2 次元バー
以下略。
ーーー
グラフのプロパティ
あとプロパティは、MsChartのプロパティボックスの、英字見出しを参考に、決める値を代入して、設定する。
書きコードを実行すると、10本の棒グラフができる。
ほか参考
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode …
ーーー
下記は十分ではないが大筋は
Private Sub UserForm_Initialize()
'--エクセルセルデータの配列化
Dim dt(10)
Dim lb As String
For i = 1 To 10
dt(i) = Cells(i, "A")
Next i
'---
With MSChart1
.ChartType = VtChChartType2dBar
.ChartData = dt
.Row = 1
.RowLabel = "日別"
.ColumnLabel = "出席者数"
.TitleText = "エクセルデータ"
.ShowLegend = True
End With
End Sub
    • good
    • 0
この回答へのお礼

やはり、一度、配列にコピーするしかなさそうですね。
ありがとうございました。

お礼日時:2009/07/20 08:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!