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

Forumthread: Diagramm mit mehreren Bezügen auf div. Tabellenblä

Diagramm mit mehreren Bezügen auf div. Tabellenblä
28.10.2013 22:45:51
Benni
Hallo liebe VBA-Spezialisten,
hoffe Ihr könnt mir bei einem Auswerteproblem helfen. Bin leider nicht fit in VBA.
Folgendes Problem:
In einer Excel-Datei befinden sich einige Tabellenblätter (Werte1.....Werte10). Der Aufbau der jeweiligen Tabellenblätter ist immer identisch. Ich muss nun aus immer festen Bezügen, aus allen Tabellenblättern, ein Diagramm erstellen. Jedes Tabellenblatt enthält 3 Datenreihen. Somit ergeben sich aus 10 Tabellenblättern und jeweils 3 Datenreihen 30 Linien in einem Diagramm.
Die einzelnen "Adressen" der Datenreihen sind immer pro Tabellenblatt gleich. z.B.
Datenreihe 1: Werte1 (Tabellenbaltt) // x-Werte von A6:A1000 // y-Werte von C6:C1000 // Name auf B1
Datenreihe 2: Werte1 // x-Werte von D6:D1000 // y-Werte von F6:F1000 // Name auf E1
Datenreihe 3: Werte1 // x-Werte von G6:G1000 // y-Werte von I6:I1000 // Name auf H1
Datenreihe 4: Werte2 // x-Werte von A6:A1000 // y-Werte von C6:C1000 // Name auf B1
Datenreihe 5: Werte2 // x-Werte von D6:D1000 // y-Werte von F6:F1000 // Name auf E1
Datenreihe 6: Werte2 // x-Werte von G6:G1000 // y-Werte von I6:I1000 // Name auf H1
Das Diagramm soll als neues Tabellenblatt ausgegeben werden.
Aufgrund der immer festen "Adressen" wird hier vermutlich eine Schleife am einfachsten sein.
Wäre echt super, wenn mir einer von Euch helfen könnte.
Vielen vielen Dank an alle helfende User.
Grüße
Benni

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 08:17:03
Arthur
Hallo Benni.
Mein Vorschlag ist die Datenreiehen in einem separaten Tabellenblatt zusammen zu stellen und darauf das Diagramm laufen zu lassen. Zur Not das Tabellenblatt ausblenden. Dann ist kein VBA notwendig und die spätere Wartung des Codes ebensowenig.
Gruß, Arthur

AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 08:37:58
fcs
Hallo Benni,
im einfachsten Fall sieht so ein Makro wie folgt aus.
mfg
Franz
Sub MakeDiagram()
Dim wks As Worksheet, intI As Integer
Dim intRange As Integer
Dim strRange_X As String, strRange_Y As String, strRange_Name As String
Dim objChart As Chart, wksDiagramm As Worksheet
Dim objReihe As Series
ActiveWorkbook.Worksheets.Add before:=ActiveWorkbook.Sheets(1)
Set wksDiagramm = ActiveSheet
wksDiagramm.Shapes.AddChart
Set objChart = wksDiagramm.ChartObjects(1).Chart
objChart.ChartType = xlXYScatterLinesNoMarkers
For intI = 1 To 10
Set wks = ActiveWorkbook.Worksheets("Werte" & Format(intI, "0"))
For intRange = 1 To 3
strRange_X = "='" & wks.Name & "'!" _
& wks.Range("A6:A1000").Offset(0, (intRange - 1) * 3).AddressLocal
strRange_Y = "='" & wks.Name & "'!" _
& wks.Range("D6:D1000").Offset(0, (intRange - 1) * 3).AddressLocal
strRange_Name = "='" & wks.Name & "'!" _
& wks.Range("B1").Offset(0, (intRange - 1) * 3).AddressLocal
Set objReihe = objChart.SeriesCollection.NewSeries
With objReihe
.Name = strRange_Name
.XValues = strRange_X
.Values = strRange_Y
End With
Next intRange
Next intI
End Sub

Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 08:45:09
Beverly
Hi Benni,
Sub DiaErstellen()
Dim wksTab As Worksheet
Dim intReihe As Integer
Dim intSpalte As Integer
intSpalte = 1
With ActiveSheet.Shapes.AddChart(10, 10, 500, 350).Chart
.ChartType = xlXYScatterLines
For Each wksTab In Worksheets
If InStr(wksTab.Name, "Werte") > 0 Then
For intReihe = 1 To 3
With .SeriesCollection.NewSeries
.XValues = wksTab.Range(wksTab.Cells(6, intSpalte), _
wksTab.Cells(11, intSpalte))
.Values = wksTab.Range(wksTab.Cells(6, intSpalte + 2), _
wksTab.Cells(11, intSpalte + 2))
.Name = wksTab.Cells(1, intSpalte + 1)
End With
intSpalte = intSpalte + 3
Next intReihe
intSpalte = 1
End If
Next wksTab
End With
End Sub


Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 21:35:30
Benni
Hallo Beverly,
vielen Dank für deine Antwort.
Komme mit dem Code nicht ganz klar. Wo finde ich die Zuordnung der einzelnen x/y-Werte bzw. Namen. Kann dies auch mit den für mich ersichtlichen Adressen (z.B. C6:C1000) umgesetzt werden? Würde den Code auch gerne für zukünftige Auswertungen verwenden wo sich die "Adressen" für x/y-Werte bzw. Namen ändern.
Viele Grüße
Benjamin

Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
29.10.2013 21:58:40
Beverly
Hi Benjamin,
If InStr(wksTab.Name, "Werte") > 0 Then
in dieser Zeile wird festgelegt, dass im Namen der Tabellenblätter, die für die Auswertung herangezogen werden sollen, der Begriff "Werte" enthatlten sein muss.
Der Code für die Datenreihen läuft in einer Schleife über die 9 Spalten in 3er Schritten, denn jeweils 3 Spalten gehören zu einer Datenreihe.
.XValues = wksTab.Range(wksTab.Cells(6, intSpalte), wksTab.Cells(11, intSpalte))
gibt an, dass die X-Werte den Spalten 1 (A), 4 (D) und 7 (G) entnommen werden sollen, da die Schleife in 3er Schritten von 1 bis 9 läuft. In meinem Beispiel sind es die Zeilen 6 bis 11 (das musst du an deine tatsächlichen Bedingungen anpassen).
.Values = wksTab.Range(wksTab.Cells(6, intSpalte + 2), wksTab.Cells(11, intSpalte + 2))
die Y-Werte werden den Spalten 3 (C), 6 (F) und 9 (I) entnommen (laufende Spalte + 2)
.Name = wksTab.Cells(1, intSpalte + 1)
der Name wird den Spalten 2 (B), 5 (E) und 8 (H) in Zeile 1 entnommen (laufende Spalte + 1)
In wieweit du das für künftige Diagramme verwenden kannst, kann ich nicht beurteilen - wenn die Bedingungen die selben bleiben, dann ja, andernfalls musst du den Code an die geänderten Bedingugne anpassen.
Einen Universalcode gibt es nicht - er hängt immer von den ganz konkreten Bedingungen ab.


Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
30.10.2013 08:51:23
Benni
Hallo Beverly,
.XValues = wksTab.Range(wksTab.Cells(6, intSpalte), wksTab.Cells(11, intSpalte))
gibt an, dass die X-Werte den Spalten 1 (A), 4 (D) und 7 (G) entnommen werden sollen
Wo finde ich hier die Spalten? Es ist für mich nur der Bereich 6 bis 11 ersichtlich.
Ist eine integration nach dem Adressenformat auch mölich? Finde das nachvollziehbarer.
Vielen Dank für den aktuellen Code. Hat mir sehr viel Arbeit abgenommen und funktioniert.
Grüße
Benjamin

Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
30.10.2013 09:15:01
Beverly
Hi Benjamin,
es gibt die Darstellungsmöglichkeit für einen Zellbezug als Range("A6:A1000") oder als Range(Cells(6, 1), Cells(1000, 1)) - bei Cells also in der umgekehrten Reihenfolge für Spalte und Zeile wie bei Range als Cells(Zeile, Spalte). Schau dir dazu auch mal die VBA-Hilfe an.
Man kann selbstverständlich auch Cells(Zeile, "A") schreiben, wobei Zeile eine Zahl und die Spalte als Buchstabe angegeben ist. In deinem Fall ist "A" aber nicht konstant, sondern aus A muss im nächsten Durchlauf D und dann G werden, d.h. die Spalte ändert sich dynamisch, da sie ja in der Schleife in3er Schritten abgearbeitet wird. Dazu wird die Variable intSpalte verwendet, die sich in der Schleife durch die 3er Schritte von 1 (A) auf 4 (D) und auf 7 (G) ändert.
Wenn du alles in deiner Range-Schreibweise haben willst, dann kannst du keine Schleife verwenden sondern musst jeden Zellbereich einzeln benennen:
               With .SeriesCollection.NewSeries
.XValues = wksTab.Range("A6:A1000")
.Values = wksTab.Range("C6:C1000")
.Name = wksTab.Range("B1")
End With
With .SeriesCollection.NewSeries
.XValues = wksTab.Range("D6:D1000")
.Values = wksTab.Range("F6:F1000")
.Name = wksTab.Range("E1")
End With
With .SeriesCollection.NewSeries
.XValues = wksTab.Range("G6:D1000")
.Values = wksTab.Range("I6:I1000")
.Name = wksTab.Range("H1")
End With


Anzeige
AW: Diagramm mit mehreren Bezügen auf div. Tabellenblä
30.10.2013 18:35:39
Benni
Hallo Beverly,
ich probier das Morgen mal aus.
Nochmals vielen Dank für deine intensiven Erläuterungen.
Grüße
Benni
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel Diagramm Erstellen aus mehreren Tabellenblättern


Schritt-für-Schritt-Anleitung

Um ein Excel Diagramm über mehrere Tabellenblätter zu erstellen, kannst du die folgenden Schritte befolgen:

  1. Öffne deine Excel-Datei mit den benötigten Tabellenblättern.

  2. Erstelle ein neues Tabellenblatt für dein Diagramm, indem du auf das "+"-Symbol am unteren Rand klickst.

  3. Öffne den VBA-Editor mit ALT + F11.

  4. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deinDateiname)" > Einfügen > Modul.

  5. Kopiere und füge den folgenden VBA-Code ein:

    Sub MakeDiagram()
       Dim wks As Worksheet, intI As Integer
       Dim intRange As Integer
       Dim strRange_X As String, strRange_Y As String, strRange_Name As String
       Dim objChart As Chart, wksDiagramm As Worksheet
       Dim objReihe As Series
    
       ActiveWorkbook.Worksheets.Add before:=ActiveWorkbook.Sheets(1)
       Set wksDiagramm = ActiveSheet
       wksDiagramm.Shapes.AddChart
       Set objChart = wksDiagramm.ChartObjects(1).Chart
       objChart.ChartType = xlXYScatterLinesNoMarkers
    
       For intI = 1 To 10
           Set wks = ActiveWorkbook.Worksheets("Werte" & Format(intI, "0"))
           For intRange = 1 To 3
               strRange_X = "='" & wks.Name & "'!" & wks.Range("A6:A1000").Offset(0, (intRange - 1) * 3).AddressLocal
               strRange_Y = "='" & wks.Name & "'!" & wks.Range("D6:D1000").Offset(0, (intRange - 1) * 3).AddressLocal
               strRange_Name = "='" & wks.Name & "'!" & wks.Range("B1").Offset(0, (intRange - 1) * 3).AddressLocal
    
               Set objReihe = objChart.SeriesCollection.NewSeries
               With objReihe
                   .Name = strRange_Name
                   .XValues = strRange_X
                   .Values = strRange_Y
               End With
           Next intRange
       Next intI
    End Sub
  6. Führe das Makro aus, indem du F5 drückst oder das Makro aus dem Menü auswählst.

Das Diagramm wird nun auf einem neuen Tabellenblatt erstellt und verwendet Daten aus mehreren Tabellen.


Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden"

    • Lösung: Stelle sicher, dass die Tabellennamen korrekt sind und existieren. Überprüfe die Schreibweise.
  • Fehler: Diagramm wird nicht angezeigt

    • Lösung: Überprüfe, ob der Code korrekt ausgeführt wurde und keine Fehler in der Schleife aufgetreten sind.
  • Datenreihe fehlt im Diagramm

    • Lösung: Achte darauf, dass die Zellbezüge korrekt sind. Wenn du einen anderen Bereich verwenden möchtest, passe den Code entsprechend an.

Alternative Methoden

Wenn VBA nicht dein bevorzugter Weg ist, kannst du auch die Daten in einem neuen Tabellenblatt manuell zusammenstellen und dann ein Diagramm daraus erstellen. Hier sind die Schritte:

  1. Erstelle ein neues Tabellenblatt.
  2. Kopiere die Daten aus den verschiedenen Tabellenblättern in dieses Blatt.
  3. Markiere die Daten und gehe zu Einfügen > Diagramm.
  4. Wähle den Diagrammtyp aus und passe ihn nach Bedarf an.

Diese Methode ist weniger automatisiert, kann aber nützlich sein, wenn du die Daten visuell überprüfen möchtest.


Praktische Beispiele

Hier sind Beispiele, wie du Daten aus zwei oder mehreren Tabellen in einem Diagramm darstellen kannst:

  • Beispiel 1: Erstelle ein Diagramm aus zwei Tabellen mit den Namen "Werte1" und "Werte2". Nutze denselben VBA-Code, aber passe die Schleife von 1 To 10 auf 1 To 2 an.

  • Beispiel 2: Wenn du Daten aus verschiedenen Arbeitsblättern kombinieren möchtest, kannst du den Code so anpassen, dass er nur die benötigten Tabellen berücksichtigt.

For intI = 1 To 2 ' für zwei Tabellen
    ' Rest des Codes bleibt unverändert
Next intI

Tipps für Profis

  • Verwende benannte Bereiche für einfachere Referenzen in deinem Diagramm.
  • Nutze Diagrammvorlagen, um den Prozess zu beschleunigen, wenn du regelmäßig ähnliche Diagramme benötigst.
  • Experimentiere mit Diagrammtypen, um die besten Ergebnisse für deine Daten zu erzielen.

FAQ: Häufige Fragen

1. Kann ich ein Diagramm aus Daten in mehreren Tabellenblättern erstellen? Ja, du kannst ein Diagramm aus mehreren Tabellenblättern erstellen, indem du VBA verwendest, um die Daten zusammenzuführen.

2. Wie kann ich den Code anpassen, wenn sich die Struktur meiner Daten ändert? Du musst die Zellbezüge im Code anpassen, um die neuen Adressen der x/y-Werte und der Namen zu berücksichtigen.

3. Ist es möglich, ein Excel Diagramm in ein neues Tabellenblatt zu erstellen? Ja, der oben angegebene Code erstellt das Diagramm automatisch in einem neuen Tabellenblatt.

4. Wie gehe ich vor, wenn ich die Daten manuell zusammenstellen möchte? Kopiere die benötigten Daten in ein neues Tabellenblatt und erstelle dann das Diagramm direkt aus diesen Daten.

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