2017-04-15 5 views
0

でマクロを持つ複数のデータ系列をploting:X値が列「I」であるこれは私のコードでエクセル

Dim i As Integer 
Dim names1 As String 
Dim names2 As String 
Dim names3 As String 


ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select 
For i = 1 To 1 

    names1 = Cells(2, i + 1).Address 
    names2 = Range(Cells(3, i), Cells(85, i)).Address 
    names3 = Range(Cells(3, i + 1), Cells(85, i + 1)).Address 

    ActiveChart.SeriesCollection.NewSeries 
    ActiveChart.FullSeriesCollection(1).Name = "=Sheet3!" & names1 
    ActiveChart.FullSeriesCollection(1).XValues = "=Sheet3!" & names2 
    ActiveChart.FullSeriesCollection(1).Values = "=Sheet3!" & names3 

Next i 

は、Yの値は、今私はすべての中で考える 欄に「I + 1」であり、ループすると、既存のプロットが削除され、新しいプロットが描画されます。お互いにプロットを積み重ねるために何を追加するのですか?

+0

あなたは 'For'ループが '1から1'にあります? –

+0

最初のデータセットをプロットして削除するようにして、1から1に変更してここに正しいバージョンをコピーするのを忘れてしまいました。 – mojijoon

+0

私の答えと下のコードを参照してください –

答えて

2

(コードのコメント内の説明)以下のコードを試してみてください。

Option Explicit 

Sub PlotMultiSeries() 

Dim i   As Long 
Dim names1  As String 
Dim names2  As String 
Dim names3  As String 
Dim MyCht  As Shape 
Dim Ser   As Series 

' axccording to your code, you are using "Sheet3" , fully qualify all your Ranges and Cells 
With Worksheets("Sheet3") 

    ' set the created Chart to a Shape variable 
    Set MyCht = .Shapes.AddChart2(Style:=240, XlChartType:=xlXYScatterSmooth) 

    For i = 1 To 1 ' your i loop is from 1 To 1 ??? 
     names1 = .Cells(2, i + 1).Address(False, False, xlA1, True) 
     names2 = .Range(.Cells(3, i), .Cells(85, i)).Address(False, False, xlA1, True) 
     names3 = .Range(.Cells(3, i + 1), .Cells(85, i + 1)).Address(False, False, xlA1, True) 

     With MyCht 
      ' add a new series 
      Set Ser = .Chart.SeriesCollection.NewSeries 
      ' define new Series properties 
      With Ser 
       .Name = "=" & names1 
       .XValues = "=" & names2 
       .Values = "=" & names3 
      End With 
     End With 
    Next i 
End With 
+0

私はそれを次のように少し変更しました i = 2 To 5 names1 =セル(2、2 * i - 1).Address names2 = Range(Cells(3,2 * i - 1)、細胞(85、2 * I - 1)) names3 =範囲(セル(3、2 * I)、細胞(85アドレス、2 * I))は、全てを通してスイープI = 1 アドレス。列とプロット(最初のセットをプロットして次のものにする必要があります)、その後は正常に動作します – mojijoon

+0

@mojijoonがうれしく思います:)「回答」としてマークするのを忘れないでください –

+0

最初の繰り返し。私はそれを変更して最初のデータセットだけをプロットすることができますか? – mojijoon

関連する問題