|
整理したらこんな感じです。
Sub Program1()
Dim a As Long
'
Dim co As ChartObject, ns As Series
Dim cc(1 To 3) As Range, II As Integer, tf As Boolean, ss(1 To 3) As String
'プロンプト内容
ss(1) = "X軸DATAの先頭を選択してください。"
ss(2) = "y軸DATAの先頭を選択してください。"
ss(3) = "y軸項目名を選択してください。"
'埋め込みグラフ追加
With Application.ActiveSheet.Range("A1:E10") 'A1:E10の範囲に作る場合
Set co = Application.ActiveSheet.ChartObjects.Add(.Left, .Top, .Width, .Height)
End With
'グラフタイプ
co.Chart.ChartType = xlLine
For a = 1 To 10
'各種セルを選択
tf = True
For II = 1 To 3
Set cc(II) = Nothing '念のため初期化
'InputBoxでセット(キャンセルするとエラーになるのでエラースキップ)
On Error Resume Next
Set cc(II) = Application.InputBox(Prompt:=ss(II), Default:="A1", Type:=8)
On Error GoTo 0
If cc(II) Is Nothing Then
MsgBox "キャンセルを押しました", vbExclamation
tf = False: Exit For
End If
Next
'無事に3つともセットしていたら、
If tf = True Then
'X,Y系列データは範囲を拡張
For II = 1 To 2
With cc(II).Parent
Set cc(II) = .Range(cc(II), cc(II).End(xlDown)) '拡張
End With
Next
Set ns = co.Chart.SeriesCollection.NewSeries
'グラフを書く
With ns
.XValues = cc(1)
.Values = cc(2)
.Name = "=" & cc(3).Address(ReferenceStyle:=xlR1C1, External:=True)
End With
End If
'グラフ描画
DoEvents
'系列を追加
If MsgBox("波形を追加しますか?", vbYesNo + vbQuestion, "") = vbNo Then Exit For
Next a
'終了
Set ns = Nothing: Set co = Nothing
Erase cc, ss
End Sub
|
|