2013-04-15 3 views
0

У меня есть следующий макрос, который отображает граф Scatter для трех столбцов. Один столбец (AL13, вниз) находится на оси x. Как мне получить его для построения двух других столбцов (AK и AM) на один и тот же разброс? Также в разных цветах друг другу? Thank youРазный цвет между сериями VBA Scatter Graph

Sub Graphing() 

     Set rng4 = ActiveSheet.Range(Range("AP13"), Range("AV33")) 

With ActiveSheet.ChartObjects.Add(Left:=rng4.Left, Width:=rng4.Width, Top:=rng4.Top, Height:=rng4.Height) 
    .Chart.ChartType = xlXYScatter 
    .Chart.HasLegend = False 
    .Chart.Axes(xlCategory).TickLabels.Font.Size = 18 
    .Chart.Axes(xlValue).TickLabels.Font.Size = 18 
    Set srs = .Chart.SeriesCollection.NewSeries 
    srs.Values = Range(Range("AK13"), Range("AK13").End(xlDown)) 
    srs.XValues = Range(Range("AL13"), Range("AL13").End(xlDown)) 
    srs.Values = Range(Range("AM13"), Range("AM13").End(xlDown)) 

End With 
End Sub 

ответ

1

Я перепечатывать код, который я пересмотренное для вас выше, спасибо за меня кредитование :)

Sub Graphing() 
'Declare all the variables to be used:' 
Dim rng4 as Range 
Dim srs as Series 
Dim cht as Chart 
Dim xVals as Range 
Dim srsVals as Range 

'Set the chart's data range:' 
Set rng4 = ActiveSheet.Range(Range("AP13"), Range("AV33")) 

'Set the range variable to contain the series values' 
' You can later modify this to include any number of columns, and the ' 
' loop structure below will add each column as a series to the chart.' 
Set srsVals = ActiveSheet.Range(Range("AL13"),Range("AM13").End(xlDown)) 

'Set the cht variable:' 
Set cht= ActiveSheet.ChartObjects.Add(Left:=rng4.Left, Width:=rng4.Width, Top:=rng4.Top, Height:=rng4.Height).Chart 

'Set the Range variable for xValues: 
Set xVals = Range(Range("AK13"),Range("AK13").End(xlDown)) 

'Format the chart and add series to the chart by iterating over the columns in srsVals:' 
With cht 
    .ChartType = xlXYScatter 
    .HasLegend = False 
    .Axes(xlCategory).TickLabels.Font.Size = 18 
    .Axes(xlValue).TickLabels.Font.Size = 18 

    'Create the series in a loop 
    For c = 1 to srsVal.Columns.Count 
     Set srs = .SeriesCollection.NewSeries 
     With srs 
      .Values = xVals 
      .XValues = Range(srsVals.Columns(c).Address) 
      .Name = "Series " & c '<-- Modify as needed.' 
     End With 
    Next 

End With 
End Sub 
1

Я обнаружил, что если бы я установил серию как две отдельные серии, тогда она построит оба изображения и даст им разные цвета. Не уверен, что это самый эффективный способ сделать это, но он работает.

Sub Graphing() 
    'Declare all the variables to be used:' 
    Dim rng4 as Range 
    Dim srs as Series 
    Dim cht as Chart 
    Dim xVals as Range 
    Dim srsVals as Range 

    'Set the chart's data range:' 
    Set rng4 = ActiveSheet.Range(Range("AP13"), Range("AV33")) 

    'Set the range variable to contain the series values' 
    ' You can later modify this to include any number of columns, and the ' 
    ' loop structure below will add each column as a series to the chart.' 
    Set srsVals = ActiveSheet.Range(Range("AL13"),Range("AM13").End(xlDown)) 

    'Set the cht variable:' 
    Set cht= ActiveSheet.ChartObjects.Add(Left:=rng4.Left, Width:=rng4.Width, Top:=rng4.Top, Height:=rng4.Height).Chart 

    'Set the Range variable for xValues: 
    Set xVals = Range(Range("AK13"),Range("AK13").End(xlDown)) 

    'Format the chart and add series to the chart by iterating over the columns in srsVals:' 
    With cht 
     .ChartType = xlXYScatter 
     .HasLegend = False 
     .Axes(xlCategory).TickLabels.Font.Size = 18 
     .Axes(xlValue).TickLabels.Font.Size = 18 

     'Create the series in a loop 
     For c = 1 to srsVal.Columns.Count 
      Set srs = .SeriesCollection.NewSeries 
      With srs 
       .Values = xVals 
       .XValues = Range(srsVals.Columns(c).Address) 
       .Name = "Series " & c '<-- Modify as needed.' 
      End With 
     Next 

    End With 
End Sub 
+0

Это выглядит правильно для меня, хотя вы можете просто использовать 'Set SRs = .Chart. ..' для обоих, не нужно также использовать 'srs2' *, если * вам не нужны обе серии, хранящиеся в памяти (для сравнения, вычисления и т. д.). Если вы хотите, я могу отредактировать ваш ответ, чтобы быть немного более эффективным, но код, который вы предоставили, выглядит правильно. –

+0

Да, пожалуйста, это было бы здорово. Эффективные способы будут полезны, поскольку я добавил названия и т. Д., И это скоро, хотя и работает нормально, выглядело неуклюжим. – Mary

+0

Я отправил вам изменения в свой код, он будет доступен после того, как он будет рассмотрен некоторыми людьми с более точными точками репутации, чем я :) –

Смежные вопросы