Clever-Excel-Forum

Normale Version: Chart anlegen via Arrays
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Forum,

folgender Code legt ein Chart einer Häufigkeitsverteilung an

'Häufigk.Chart anlegen
Set oChart = ActiveSheet.ChartObjects.Add(500, 100, 300, 200)
With oChart.Chart
    .SetSourceData Source:=Range("$A$1:$B$10")
    .ClearToMatchStyle
    .ChartStyle = 238
    .ChartTitle.Characters.Text = "Häufigkeiten"
End With


Wie lassen sich "Range A1:A10 (Klassen) und B1:B10 (Häufigkeiten)" durch 2 nicht tabellengebunde Arrays ersetzen?

MfG
Rolf Beißner
Hallöchen,

Du bildest für jede Sriescollection ein Array oder korrekterweise einen String der ein Array darstellt, z.B.

arrSeCol(1) = "={-0.5,0.5,-1.38}"
arrSeCol(1) = "={-0.5,0.5,-1.38}"

und tust die Arrays dann in einer Schleife zuweisen, z.B.

Code:
For iCnt = 1 To 2
    .SeriesCollection.NewSeries
    With .SeriesCollection(iCnt)
      .XValues = ""
      .Values = arrSeCol(iCnt, 1)
      .Name = arrSeCol(iCnt, 2)
      .Border.Color = arrSeCol(iCnt, 3)
      .Format.Line.Weight = 0.25
    End With
  Next

Das Codestück hier erstellt eine neue SC und weist neben den 3 Werten auch Name und Farben zu, daher im Beispiel das 2D-Array.
Für das Eintragen der Werte könnte das so aussehen:

Code:
arrSeCol(1) = "={-0.5,0.5,-1.38}"
arrSeCol(1) = "={-0.5,0.5,-1.38}"
  For iCnt = 1 To 2
    With .SeriesCollection(iCnt)
      .XValues = ""
      .Values = arrSeCol(iCnt)
    End With
  Next

Allerdings hat(te?) sich Excel da etwas eigen und hat mir damals die Farben der SC's verhauen ..
Hallo André,

danke für den Tipp.
Auf mein Anliegen zugeschnitten, sieht der Code so aus:

Sub ChartViaSeriesCollection()
    Dim wks As Worksheet
    Dim co As ChartObject
    Dim s1 As Series, s2 As Series
   
    Set wks = Sheets.Add
    If wks.ChartObjects.Count > 0 Then wks.ChartObjects.Delete
    Set co = ActiveSheet.ChartObjects.Add(50, 40, 200, 200)
    With co.Chart
        Set s1 = .SeriesCollection.NewSeries
        s1.Values = Array(20, 30, 40, 50, 30, 10)
        Set s2 = .SeriesCollection.NewSeries
        s2.XValues = Array(1, 2, 3, 4, 5, 6)
        .ClearToMatchStyle
        .ChartStyle = 238
        .HasTitle = True
        .ChartTitle.Characters.Text = "Häufigkeiten"
        .Legend.Delete
    End With
End Sub


Nochmals danke und herzliche Grüße
Rolf