折れ線グラフに表示する項目軸が多く、グラフが大きくなってしまう場合など
にはチャートを左右にスクロール出来ると便利です。
サンプルではSetSourceDataメソッドを用いてソースデータを変更します。
(前提):折れ線グラフ作成が可能なデータ(セルA1から連続するデータ範囲)
コマンドボタン、スピンボタン
'======宣言セクション======
Dim Rng As Range
Dim RngTitle As Range, RngData As Range
Dim ChartObj As ChartObject
Const cntData As Integer = 10 '表示データ行数
'====== チャート作成 ======
Private Sub CommandButton1_Click()
'シート上のチャートを削除
ActiveSheet.ChartObjects.Delete
Dim rngForChart As Range
Dim L As Double, T As Double, W As Double, H As Double
Dim Msg As String
ActiveCell.Activate 'コマンドボタンからの実行時には必要
'データ範囲確定
Set Rng = Range("A1").CurrentRegion
Set RngTitle = Rng.Resize(1) 'Rngの一行目(項目行)
Set RngData = Rng.Offset(1).Resize(cntData) 'データ範囲
'チャートの貼り付け位置確定
Msg = "チャートを作成するセル範囲を指定してください"
Set rngForChart = _
Application.InputBox(Msg, "セル範囲指定", Type:=8)
With rngForChart
L = .Left: T = .Top: W = .Width: H = .Height
End With
'位置を指定してチャートの作成
Set ChartObj = ActiveSheet.ChartObjects.Add(L, T, W, H)
With ChartObj.Chart
.ChartType = xlLine '折れ線グラフを指定
'項目行とデータ範囲を結合してソースデータをセット
.SetSourceData Source:=Union(RngTitle, RngData), _
PlotBy:=xlColumns
End With
With SpinButton1 ' スピンボタンの初期値を設定
.Max = Rng.Rows.Count - 10
.Min = 1
.SmallChange = 1
.Value = 1
End With
End Sub
'====== ソースデータ変更(表示データスクロール) ======
Private Sub SpinButton1_Change()
'コード改定時などプロジェクトがリセットされている場合に
'オブジェクト変数を再設定
If ChartObj Is Nothing Then
Set ChartObj = ActiveSheet.ChartObjects(1)
Set Rng = Range("A1").CurrentRegion
Set RngTitle = Rng.Resize(1)
End If
'スピンボタンの現在値を基準にデータ範囲を変更
Set RngData = Rng.Resize(cntData).Offset(SpinButton1.Value)
ChartObj.Chart.SetSourceData Union(RngTitle, RngData)
ChartObj.Chart.Refresh
End Sub
|