Frage an arrays, charts, vba, excel, range – Erstellen Sie ein Diagramm aus Array-Daten und nicht aus dem Bereich

15

Ist es möglich, ein Diagramm (z. B. ein Doppel-Y-Achsen-Liniendiagramm) nicht aus Bereichen, sondern aus Array-Daten zu erstellen? Wenn das so ist, wie?

@assylias Plus Ich habe die andere Frage nicht als beantwortet angesehen brettdj
@ Jean-FrançoisCorbett Einverstanden - Ich hätte als verbunden markieren sollen, nicht als Duplikat. assylias
@assylias: Das ist kein offensichtliches Duplikat ... Die Sprache ist C #, nicht VBA. Die Konzepte sind ziemlich ähnlich, aber ein ausgearbeitetes Beispiel wird überhaupt nicht gleich aussehen. Jean-François Corbett
@brettdj Einverstanden - Ich hätte als verbunden markieren sollen, nicht als Duplikat. assylias

Deine Antwort

2   die antwort
13

Ja. Sie können Arrays dem zuweisenXValues undValues Eigenschaften von aSeries Objekt auf einem Diagramm. Beispiel:

<code>Dim c As Chart
Dim s As Series
Dim myData As Variant

Set c = ActiveChart ' Assumes a chart is currently active in Excel...
Set s = c.SeriesCollection(1)

myData = Array(9, 6, 7, 1) ' or whatever
s.Values = myData
</code>
@ ja72: Definiere "klein"? ... Ich habe es gerade mit 16.000 Punkten getestet. Jean-François Corbett
Genial. Ich stehe korrigiert. ja72
@lori_m Ich stelle einList<double> whatever.toArray() zumseries.Values und Ausführen von Excel 2007, aber es werden nur 256 Punkte angezeigt. Warum? 16k wären genug (aus praktischen Gründen), so dass ich keine unbegrenzte Anzahl mit nx1-Arrays hacken muss Mihai Bratulescu
@ ja72 bezieht sich wahrscheinlich auf Excel 2003 und früher, wo es eine Längenbeschränkung gab. Die Rastergröße begrenzt auch die Größe von 1d-Arrays auf 256 bzw. 16384 Punkte in Excel 2003/2007. Um dies zu überwinden, können Sie Daten mithilfe von als vertikales Array definierenapplication.transpose(mydata) (oder ein nx1-Array wie in einer anderen Antwort deklarieren) lori_m
Dies ist eine Begrenzung der Datenmenge, die Sie auf diese Weise ausführen können. Ich kann mich nicht erinnern, was es ist, aber es ist klein. ja72
8

aber in früheren Versionen gibt es meines Erachtens ein Limit von 255 Zeichen für die Länge jeder Reihe. Das folgende Beispiel zeigt eine Methode, mit der ich diese Einschränkung umgangen habe:

<code>Sub ChartArray()

Dim x(0 To 1000, 0 To 0) As Double
Dim y(0 To 1000, 0 To 0) As Double
x(0, 0) = 0
y(0, 0) = 0
For i = 1 To 1000
    x(i, 0) = i
    y(i, 0) = y(i - 1, 0) + WorksheetFunction.NormSInv(Rnd())
Next i

Charts.Add
ActiveChart.ChartType = xlXYScatterLinesNoMarkers
With ActiveChart.SeriesCollection
    If .Count = 0 Then .NewSeries
    If Val(Application.Version) >= 12 Then
        .Item(1).Values = y
        .Item(1).XValues = x
    Else
        .Item(1).Select
        Names.Add "_", x
        ExecuteExcel4Macro "series.x(!_)"
        Names.Add "_", y
        ExecuteExcel4Macro "series.y(,!_)"
        Names("_").Delete
    End If
End With
ActiveChart.ChartArea.Select

End Sub
</code>

Eine alternative Methode besteht darin, den Arrays Namen zuzuweisen (ähnlich der obigen Problemumgehung) und die Reihe so festzulegen, dass sie sich auf die zugewiesenen Namen bezieht. Dies funktioniert in allen Versionen, solange Sie im xls-Format speichern. Beim Speichern in den neuen Formaten xlsx / xlsm / xlsb scheint es jedoch eine Längenbeschränkung für benannte Arrays von 8192 Zeichen zu geben.

Ich würde nicht schrecklich sagen - vielleicht verworren :) Aber ich bin nicht sicher, ob es einen anderen Weg gibt, alle Webressourcen, die ich finden konnte, sagten, dass dies in älteren Versionen nicht möglich war. lori_m
Aus Neugier macht dasExecuteExcel4Macro Trick funktioniert nicht in 2007 und später? Es hat es in Excel 2007 ausprobiert und das Diagramm enthält keine Daten. Jean-François Corbett
Nein, die alten Excel 4-Befehle scheinen in späteren Versionen nicht auf Diagrammen zu funktionieren, was ärgerlich ist. lori_m
OK danke. +1 für den interessanten / schrecklichen Ansatz! Jean-François Corbett

Verwandte Fragen