Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Diagramme mit VBA erstellen
#1
Guten Morgen zusammen,
ich möchte gerne mit VBA verschiedene Diagramme erstellen, und hab da jetzt mal ein bisschen rumprobiert, allerdings klappt es noch nicht so wie ich mir das vorstelle.

Es sollen alles Balkendiagramme sein, die Daten stehen in der Beispielmappe im Anhang auf dem Tabellenblatt Daten, es handelt sich einmal um Orte, welche ich gerne linksbündig angeordnet hätte und dann um Prozentwere die die Balken Werte sind.

Wenn das Makro durchläuft sind die Balken genau andersrum angeordnet wie in der Datentabelle, also in der Datentabelle steht "Köln" ganz oben im Diagramm dann ganz unten, die Sortierung soll aber wie in der Datentabelle sein.

Dann sollen wie gesagt die Orte linksbündig im Diagramm angezeigt werden und die Prozentwerte linkbündig um Diagrammbalken.

Die Wert Scala am unteren Diagrammrand brauche ich garnicht.

Wäre super wenn mir einer zu meinen Fragen ein paar Tips geben kann wie ich das entsprechend lösen kann.

Vielen Dank

Mila


Angehängte Dateien
.xlsm   Diagramm erstellung.xlsm (Größe: 20,32 KB / Downloads: 1)
Antworten Top
#2
Hallo Mila,

wenn du die Befehle nicht kennst, kannst du über "Makro aufzeichnen" die Befehle mitschreiben lassen während du die Aktionen manuell ausführst.

Hier zwei der drei gesuchten Befehle:
Code:
   
    ActiveSheet.ChartObjects("Diagramm 1").Activate
    ActiveChart.Axes(xlCategory).ReversePlotOrder = True
    ActiveChart.Axes(xlValue).CrossesAt = -20
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Mila
Antworten Top
#3
Hallo Helmut,
vielen Dank für die schnelle Antwort und deine Tips, bzw. lösungen. 
Die schonmal soweit funktionieren, wenn ich es richtig sehe, dann könnte mein drittes anliegen über ein 
Code:
.Axes(xlValue).Delete
gelöst werden!

Ich hab allerdings mit dem 
Code:
Axes(xlValue).CrossesAt = -20
das Problem das dann zwar die Orte alle Linksbündig stehen, die Balken aber alle nach rechts zeigen was einen positiven Wert suggeriert, was es aber ja nicht in allen fällen ist, die negativen Werte müssten auch einen Balken nach links zeigen.

Wenn ich es jetzt aber richtig sehe, müsste das über ein 
Code:
.Axes(xlCategory).TickLabelPosition = xlLow
zu lösen sien.
Antworten Top
#4
Hallo nochmal,
ich hab das soweit so hinbekommen wie ich mir das vorgestellt hatte, aber zwei Fragen hab ich dann doch noch, man sieht auf dem ersten Bild im Anhang das zwischen den Zahlen immer ein 
Zitat:-

vor dem nächsten Wert kommt,  also z.b. nach der 2 und vor der 0 oder nach der 0 und vor der 1 usw., wo ich nicht so wirklich weiss wo der her kommt.
Die Daten in der Tabelle stehen sortiert untereinander, daran sollte es also nicht liegen.

Das andere Anliegen ist, ich hab ein schönes Chart gefunden, wo quasi zwei Balken untereinander dargestellt werden, Beispiel ist auf dem zweiten Bild zusehen, ich hab aber absolut keine Ahnung wie ich das erzeugen könnte, hat da vielleicht noch einer eine idee.

Danke

LG Mila


Angehängte Dateien Thumbnail(s)
       
Antworten Top
#5
Hallo Mila,

1. Die "-" sind Teilstriche (Trennungen der Rubriken) auf der Y-Achse. Über Achse formatieren kann man diese entfernen.
2. Für den zweiten Balken benötigst du eine zweite Datenreihe und das Diagramm muss vom Typ "gruppierte Balken" sein.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Mila
Antworten Top
#6
Hallo Helmut,
vielen Dank für die Rückmeldung.

Zu Punkt 1,  den guck ich mir an danke für den Hinweis.
Zu Punkt 2, das Diagramm xlBarClustered hab ich genutzt, aber mit der zuweisung der zweiten Eben tu ich mir noch schwer, hab mir das im Macro Recorder zwar angesehen, bekomme die aber nicht so im Code eingegeben. Der Makro Recorder generiert dabei das

Code:
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.FullSeriesCollection(2).Values = "=DatenVJ!$AC$2:$AC$36"

Da ich aber ja dann fix, ich muss aber bei den Rows mit Variablen arbeiten, wenn ich jetzt versuche den Code anzupassen, dann bekomme ich es leider nicht hin,

Code:
.FullSeriesCollection(2) = "='" & DatenVJ & "'!$AC" & rngFindStart.Row ":$AC" & rngFind.Row

Wie wäre das richtig?

Danke
Antworten Top
#7
Hi,
hab da jetzt noch eine ganze Zeit rumprobiert, bekomme aber einfach die zweite Datenreihe nicht dynamisch eingebaut, was mache ich da falsch?

Danke
Antworten Top
#8
Hi,

dann hänge doch einfach nochmal die Beispiel-Probier-Datei (bei der Du es versucht hast) als Anhang hier in einen Beitrag und schreibe rein, was wo wann passieren soll.

Gruß Ralf
Antworten Top
#9
Hi,
anbei die gewünschte Beispieldatei, mit dem entspechenden Problem.

DIe Daten aus Tabelle1 sollen oben in den Balken stehen und die Daten aus Tabelle2 darunter in dem Balken

Danke


Angehängte Dateien
.xlsm   Frage Grafik.xlsm (Größe: 36,59 KB / Downloads: 2)
Antworten Top
#10
Hallöchen,

also, die Zeile erzeugt einen Fehler
.FullSeriesCollection(2).Values = Sheets(1).Range(tblDaten2.Cells(rngFindStart.Row, 7), tblDaten2.Cells(rngFind.Row, 7))

so gehts
.FullSeriesCollection(2).Values = Sheets(1).Range(tblDaten2.Cells(rngFindStart.Row, 7).Address, tblDaten2.Cells(rngFind.Row, 7).Address)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Mila
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste