Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

eingebettetes Diagramm mit array füttern

Forumthread: eingebettetes Diagramm mit array füttern

eingebettetes Diagramm mit array füttern
13.12.2005 14:56:56
Alex
Hallo Leute,
Ich hab folgendes Problem: ich möchte mittels eines arrays ein XY Diagramm erzeugen, dieses Array füttere ich mit daten aus anderen Blättern , dass funktioniert alles super und ich schreibe dieses Array auch in mein gerade aktives Blatt, gleichzeitig möchte ich diese daten aber in einem Diagramm darstellen, was mit einfachen arrays funktioniert aber mit meinem dynamisch erstellten einfach nicht gelingen will.
es kommt immer ein laufzeitfehler 1004 dass die x-Value eigenschaft des Series objektes nicht festgelegt werden kann.
vielleicht kann mir ja wer weiter helfen, die daten wieder extra irgendwohinzuschreiben und dann erst das diagramm zu erzeugen kan ichnicht gebrauchen weil ich später das diagramm auch in meine userformen einbinden will ohne weitere zellen zu füllen.
ps der code ist mit ein paar überflüssigen berechnungen und typumwandlungen gespickt, aber was versucht man nicht alles in seiner not.
hier der code zum verständnis des problems, der Fehler tritt dann in den untersten zeilen beim Graph-erzeugen auf.

Private Sub Tabelleerzeugen()
Dim Zeilengesamt As Integer
Dim i
ActiveSheet.Columns(29).Delete
ActiveSheet.Columns(30).Delete
ActiveSheet.Columns(31).Delete
ActiveSheet.Columns(32).Delete
ActiveSheet.Columns(33).Delete
ActiveSheet.Cells(1, 29).Value = "t"
ActiveSheet.Cells(1, 30).Value = "s"
ActiveSheet.Cells(1, 31).Value = "v"
ActiveSheet.Cells(1, 32).Value = "a"
ActiveSheet.Cells(1, 33).Value = "r"
Zeilengesamt = 0
For n = 1 To Übergängegesamt
Zeilengesamt = Zeilengesamt + mat(n, Punkte)
Next n
ReDim taballt(Zeilengesamt - 1, 0)
ReDim taballs(Zeilengesamt - 1, 0)
ReDim taballv(Zeilengesamt - 1, 0)
ReDim taballa(Zeilengesamt - 1, 0)
ReDim taballr(Zeilengesamt - 1, 0)
j = 1
i = 0
For j = 1 To Übergängegesamt
k = 1
For k = 1 To mat(j, Punkte)
taballt(i, 0) = (Worksheets(mat(j, Bewgesetz)).Cells(k + 1, 14))
taballs(i, 0) = (Worksheets(mat(j, Bewgesetz)).Cells(k + 1, 16))
taballv(i, 0) = (Worksheets(mat(j, Bewgesetz)).Cells(k + 1, 17))
taballa(i, 0) = (Worksheets(mat(j, Bewgesetz)).Cells(k + 1, 18))
taballr(i, 0) = (Worksheets(mat(j, Bewgesetz)).Cells(k + 1, 19))
i = i + 1
Next k
i = i - 1
Next j
For i = 0 To Zeilengesamt - 1
ActiveSheet.Cells(i + 2, 29) = taballt(i, 0)
ActiveSheet.Cells(i + 2, 30) = taballs(i, 0)
ActiveSheet.Cells(i + 2, 31) = taballv(i, 0)
ActiveSheet.Cells(i + 2, 32) = taballa(i, 0)
ActiveSheet.Cells(i + 2, 33) = taballr(i, 0)
Next i
Dim objChartObject As ChartObject
Set objChartObject = ActiveSheet.ChartObjects.Add(10, 80, 500, 180)
With objChartObject
.Name = "Weg-Zeitdiagramm"
With .Chart
.ChartType = xlXYScatterSmooth
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = taballt
.SeriesCollection(1).Values = taballs
.Legend.Delete
End With
End With
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: eingebettetes Diagramm mit array füttern
13.12.2005 15:50:03
Peter W
Servus,
das begreife ich nicht, kann logischerweisse dein Bsp. nicht nachbauen, aber bei mir funtzt das so. Das einzige Prob das ich beim Testen hatte war bei String Werten ?


      
Option Explicit
Option Base 1
Sub Makro1()
Dim myarrX, myarr
Dim lzeile As Long
Dim wks As Worksheet
Set wks = ActiveSheet
    
With wks
        lzeile = .Cells(.Rows.Count, 1).End(xlUp).Row
        
ReDim myarrX(lzeile)
        
ReDim myarr(lzeile)
            myarrX = .Range("A1:A" & lzeile)
            myarr = .Range("B1:B" & lzeile)
    
End With
    
    Charts.Add
    
With ActiveChart
        .ChartType = xlXYScatterSmooth
        .SeriesCollection.NewSeries
            .SeriesCollection(1).XValues = myarrX
            .SeriesCollection(1).Values = myarr
        .Location where:=xlLocationAsObject, Name:=wks.Name
    
End With
End Sub 


MfG Peter
Anzeige
AW: eingebettetes Diagramm mit array füttern
13.12.2005 16:20:16
Alex
Vielen Dank für die schnelle Hilfe Peter,
Dein code funktioniert bei mir genau so wie wenn ich meinen mit kleinen arrays füttere,
doch sobald ich auf meinen zusammengewürfelten-array zurückgreife geht xvalue nicht mehr,
komisch,
wegen der String-werte keine sorge ich leg dir gleich die werte bei,
nur dezimalzahlen.
wollte dann mal sehen ob ich es zumindest über umwege schaffe, kein problem, dabei erzeuge ich die tabelle ja aus dem array.
werte
0 0
0.052631579 0.000954053
0.105263158 0.007508169
0.157894737 0.024655554
0.210526316 0.056241472
0.263157895 0.104546546
0.315789474 0.170039622
0.368421053 0.251326955
0.421052632 0.345303251
0.473684211 0.447488168
0.526315789 0.552511832
0.578947368 0.654696749
0.631578947 0.748673045
0.684210526 0.829960378
0.736842105 0.895453454
0.789473684 0.943758528
0.842105263 0.975344446
0.894736842 0.992491831
0.947368421 0.999045947
1 1
1.052631579 1.000352177
1.105263158 1.00277891
1.157894737 1.009166
1.210526316 1.021038901
1.263157895 1.039423931
1.315789474 1.064765231
1.368421053 1.097087568
1.421052632 1.136297638
1.473684211 1.182231998
1.526315789 1.234658761
1.578947368 1.293279955
1.631578947 1.35773456
1.684210526 1.427602176
1.736842105 1.502407308
1.789473684 1.581624204
1.842105263 1.664682206
1.894736842 1.750971556
1.947368421 1.839849609
2 1.930647368
über die zellen der tabelle funktionierts
code für zellen
Dim objChartObject As ChartObject
Set objChartObject = ActiveSheet.ChartObjects.Add(10, 80, 500, 180)
With objChartObject
.Name = "Weg-Zeitdiagramm"
With .Chart
.ChartType = xlXYScatterSmooth
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = ActiveSheet.Range(Cells(2, 29), Cells(2 + _ Zeilengesamt - 1, 29))
.SeriesCollection(1).Values = ActiveSheet.Range(Cells(2, 30), Cells(2 + _ Zeilengesamt - 1, 30))
.Legend.Delete
End With
End With
wenn du irgendeine idee hättest woran es liegen könnte dass es nicht direkt aus dem array funktioniert wär ich dir sehr dankbar, datentypen sind richtig und es befinden sich keine Leer-Felder oder sonst irgendwas falsches im array (bzw in den zwei arays).
grüße alex
Anzeige
AW: eingebettetes Diagramm mit array füttern
13.12.2005 16:40:09
Peter W
Servus,
hab jetzt leider keine Zeit mehr, stell die frage mal auf offen.
Bin auch ehrlich gesagt nicht so bewandert mit Diagrammen, schaus mir aber morgen früh nochmal an wenn keiner geantwortet hat. Sry.
MfG Peter
AW: eingebettetes Diagramm mit array füttern
13.12.2005 17:12:33
Herbert
Hi,
die zeichenlänge im Array ist auf 250 beschränkt.
mfg herbert
Anzeige
AW: eingebettetes Diagramm mit array füttern
14.12.2005 08:49:54
Alex
hab jetzt meine werte des array noch mal genau unter die lupe genommen und bin drauf gekommen dass ich ein leerfeld am schluß hatte.
dass hab ich jetzt behoben und es funktioniert bis zu einer anzahl von 16 datenfeldern im array, darüber hinaus läßt sich nix machen. (ab 17 feldern wieder die meldung dass sich xvalue nicht festlegen läßt)
Herbert hat geschrieben dass die Zeichenlänge im array auf 250 beschränkt ist, dass ist aber nicht mein problem da ich immer Double-Werte bearbeite
mein array hat zeitweise so um die 600 datenfelder
bitte um Hilfe und vorschläge welche strategien es noch gibt um ein xy-diagramm aus einem array zu erzeugen ohne werte in ein blatt zu schreiben
Danke Alex
Anzeige
AW: eingebettetes Diagramm mit array füttern
13.12.2005 18:05:11
Dan
Hallo, der Code sollte funktionieren, vorausgesetzt die beiden arrays sind mit richtigen Werten gefuellt. Das Problem liegt wahrscheinlich in dem Inhalt der Arrays. Gruss Dan cz.
;
Anzeige

Infobox / Tutorial

Diagramme mit Arrays in Excel erstellen


Schritt-für-Schritt-Anleitung

Um ein XY-Diagramm in Excel mit einem Array zu erstellen, folge diesen Schritten:

  1. Erstelle ein neues VBA-Modul:

    • Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
    • Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) und wähle Einfügen > Modul.
  2. Füge den folgenden Code ein:

    Sub Tabelleerzeugen()
       Dim Zeilengesamt As Integer
       Dim i
       ' Spalten löschen
       ActiveSheet.Columns(29).Delete
       ActiveSheet.Columns(30).Delete
       ActiveSheet.Columns(31).Delete
       ActiveSheet.Columns(32).Delete
       ActiveSheet.Columns(33).Delete
       ' Überschriften setzen
       ActiveSheet.Cells(1, 29).Value = "t"
       ActiveSheet.Cells(1, 30).Value = "s"
       ' Daten einlesen und Array befüllen
       ' (Dein Code hier)
       ' Diagramm erstellen
       Dim objChartObject As ChartObject
       Set objChartObject = ActiveSheet.ChartObjects.Add(10, 80, 500, 180)
       With objChartObject
           .Name = "Weg-Zeitdiagramm"
           With .Chart
               .ChartType = xlXYScatterSmooth
               .SeriesCollection.NewSeries
               .SeriesCollection(1).XValues = taballt
               .SeriesCollection(1).Values = taballs
               .Legend.Delete
           End With
       End With
    End Sub
  3. Fülle das Array mit deinen Daten:

    • Stelle sicher, dass du deine Werte korrekt im Array definierst, bevor du das Diagramm erstellst.
  4. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle Tabelleerzeugen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Laufzeitfehler 1004:

    • Dieser Fehler tritt auf, wenn die XValues-Eigenschaft des Series-Objekts nicht korrekt festgelegt werden kann. Überprüfe, ob das Array tatsächlich Werte enthält und ob es nicht leer ist.
  • Array-Grenzen überschreiten:

    • Wenn du mehr als 16 Datenfelder hast und das Diagramm nicht funktioniert, stelle sicher, dass keine Leerwerte im Array sind.
  • Zeichenlängenbeschränkung:

    • Herbert hat darauf hingewiesen, dass die Zeichenlänge im Array auf 250 beschränkt ist. Achte darauf, dass deine Daten in diesem Rahmen liegen.

Alternative Methoden

Eine alternative Methode, um ein Diagramm aus einem Array zu erstellen, wäre die Verwendung von Excel-Tabellen. Du kannst deine Daten in eine Tabelle schreiben und dann das Diagramm direkt aus den Zellen erstellen.

Dim myarrX, myarr
' Werte aus einem Bereich einlesen
myarrX = ActiveSheet.Range("A1:A" & letzteZeile)
myarr = ActiveSheet.Range("B1:B" & letzteZeile)

Praktische Beispiele

Hier ist ein Beispiel, wie du ein einfaches Häufigkeitsdiagramm Excel erstellen kannst:

Sub ErstelleHäufigkeitsdiagramm()
    Dim myarr() As Variant
    myarr = Application.Transpose(Range("A1:A10").Value)

    ' Diagramm erstellen
    Dim objChart As Chart
    Set objChart = Charts.Add
    With objChart
        .ChartType = xlColumnClustered
        .SetSourceData Source:=myarr
        .Location Where:=xlLocationAsObject, Name:="Blatt1"
    End With
End Sub

Tipps für Profis

  • Array-Dimensionierung: Achte darauf, das Array dynamisch mit ReDim zu dimensionieren, um Laufzeitfehler zu vermeiden.

  • Debugging: Nutze Debug.Print, um den Inhalt deiner Arrays zu überprüfen, bevor du das Diagramm erstellst. So kannst du sicherstellen, dass die Werte korrekt sind.

  • Datenvalidierung: Überprüfe die Daten im Array auf Null- oder Leerwerte, bevor du das Diagramm erstellst.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Diagramm richtig angezeigt wird?
Überprüfe, ob die Arrays, die du verwendest, korrekt gefüllt sind und keine Leerwerte enthalten.

2. Gibt es eine Begrenzung für die Anzahl der Punkte, die ich im Diagramm darstellen kann?
Ja, die Anzahl der Datenpunkte kann je nach Excel-Version variieren. Achte darauf, dass dein Array nicht zu viele Elemente enthält.

3. Welche Excel-Version ist erforderlich?
Die Beispiele sollten in Excel 2010 und späteren Versionen funktionieren, da die Diagrammfunktionen in diesen Versionen stabilisiert wurden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige