• ベストアンサー

エクセルのシート中のデーターをMSchartでグラフ表示したい

エクセルを使うのだったらそのままグラフを表示させればよい。 と思われる方が多いだろうと思いながら質問させていただきます。 エクセル上でフォームを作成し、その上へMSchartコントロールを貼り付けます。 そして、現在アクティブになっているシートのA1~A20のデーターをもとにグラフを表示させたいと思っています。 この時、A1~A20のデーターを直接MSchartで読み込む方法がありますでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.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

elec2
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

参照設定 エクセルVBEの画面で、ツールー参照設定ーMS Chart Control 6.0 するとツールボックスにMSチャートのアイコンが増える。 それをUserForm1の上にD&D ーー データ シートのセルA1:A10の値を配列に入れる。 グラフの種類は http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=118&no=1 に解説がある。 グラフの種類は下記より選択 ' VtChChartType3dBar '3 次元バー ' VtChChartType2dBar '2 次元バー 以下略。 ーーー グラフのプロパティ あとプロパティは、MsChartのプロパティボックスの、英字見出しを参考に、決める値を代入して、設定する。 書きコードを実行すると、10本の棒グラフができる。 ほか参考 http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=118&no=0 ーーー 下記は十分ではないが大筋は 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

elec2
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A