
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
No.1
- 回答日時:
参照設定
エクセル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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Redim とEraseの違いは?
-
COBOLの基本的な事なので...
-
ジャグ配列生成時の1オリジン
-
C#,繰り返し処理での最大値の取...
-
構造体配列内の文字列検索のよ...
-
VB.NETの配列にExcelから読み込...
-
大量の変数を定義するにはどう...
-
ポーカーを作りたいのですが・・・
-
(VBA) 配列の文字列を昇順で並...
-
レコードセットの中身を配列に...
-
スロットマシンの判定方法(VB...
-
VBAで配列引数を値渡しできない...
-
VBからID3タグをいじる方法
-
クリスタルレポート(8.5)の書式...
-
DataGridViewに複数テーブルの...
-
ACCESSのレコード転送について
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
【ExcelVBA】値を変更しながら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
vba フィルター 複数条件 3つ以...
-
配列のペースト出力結果の書式...
-
OutOfMemoryExceptionの回避策...
-
配列の中の最大値とそのインデ...
-
複数のtextboxの処理を一括で行...
-
Dir関数で読み取り順を操作でき...
-
VB6からの移行したいけど、VB.N...
-
COBOLの基本的な事なので...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
EXCEL VBAの課題です
-
Redim とEraseの違いは?
-
VB.NETの配列にExcelから読み込...
-
VBAでMODE関数をつくる
-
VB.NETにて、構造体へデータを...
-
1ビットごとの配列を作りたい
-
VBAで配列引数を値渡しできない...
おすすめ情報