9k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo allerseits,

ich hab mal eine Frage zur Beschriftung in Diagrammen. Die X-Werte sind einfach nur laufende Datumswerte, für Y gibt es mehrere Datenreihen und ich will die in einem Liniendiagramm darstellen. Ich habe in der Tabelle nebeneinander zwei gleich große, getrennte Zellbereiche, einer enthält die Daten(-punkte bzw. -werte), der andere die Beschriftungen zu den Datenpunkten.

Kriegt man es mit dem Diagramm-Assistenten oder mit einer nachträglichen Formatierung hin, dass an den Datenpunkten im Diagramm nicht die Datenwerte, sondern die Beschriftungen stehen? Die Beschriftungen sind Text und haben mit den Werten nicht direkt was zu tun, da geht es also nicht um Rundung oder Nachkommastellen.

Ich denke da an sowas wie
Datenreihe formatieren... | Datenbeschriftung | Beschriftung enthält:
- Datenreihenname
- Kategoriename
- Wert
==> Leider Ende der Fahnenstange!
Da müsste man einen zusätzlichen Bereich angeben können - wäre schön!

Weiß von Euch jemand einen Rat? Mit VBA kann man sicherlich was machen, aber ohne wäre mir lieber.

Danke im Voraus!
Charlotte

PS: Bin erst morgen früh wieder am PC.

12 Antworten

0 Punkte
Beantwortet von
Hi,

@Karin (Beverly)
was du beschrieben hast, macht Charlotte's Code bereits...


Dann lese ich den Code anders. Für mich ermittelt dieser Code den WerteBereich der ersten Datenreihe des Diagramms und geht dann eine im Code fix vorgegebene Menge an Datenreihen (hier 4) durch. Ebenso erwartet er die Beschriftungen fix in Spalten, beginnend bei fix "O4"
- Dies würde ich dann z.B. variabel halten wollen indem ich die Anzahl der Datenreihen aus ActiveChart.SeriesCollection.Count holen würde. Im Anschluss daran würde ich erst, für jede Datenreihe erneut, den jeweiligen WerteBereich ermitteln wollen. (Hier könnte man dann auch gleich ermitteln, ob die Daten der Datenreihe in einer Spalte oder einer Zeile angeordnet sind.)
--kleiner Test für obigen Code (AW4): Zwei Datenreihen im Diagramm, erste Datenreihe 10 Werte, zweite Reihe 20 Werte. In jeder Reihe würden nur 10 Werte beschriftet werden, wenn man bei der Diagrammerstellung nicht den Gesamtbereich auswaehlt, sondern für jede Reihe den Bereich (einmal 10, einmal 20Zellen) explizit vorgibt.

Man sollte dem Benutzer schon so viel Freiheit lassen...

<Spass> Die hat er doch. Er kann die Datenpunkte jederzeit von Hand beschriften..., ohne ein Makro... ;-)</Spass>

Aber zurück zum Thema: Ich hatte mich erstmal an den Vorgaben von Charlotte_S aus AW4 orientiert. Dabei würde ich die Anzahl der Datenreihen variabel halten wollen, wie auch den genauen Bereich der Datenherkunft . Einzige Vorgabe (im ersten Gankengang): Beschriftungsbereich direkt neben dem Wertebereich in gleicher Grösse und Anordnung. Ob die erste Datenreihe in A1 oder wie hier in K4 beginnt, und der Beschriftungsbereich somit in E1 oder wie hier in O4 beginnt ermittelt das Makro selbst. Ob es 2, 4 oder 40 Datenreihen sind, ebenso (incl. sich dadurch ergebende Verschiebung des Beschriftungsbereiches). Mit etwas Aufwand könnte ich mir auch vorstellen zu ermitteln, ob die Datenbereiche aller Reihen zusammenhängend sind oder nicht. Wenn zusammenhängend in Zeilen, dann als Vorgabe (oder auch Auswahl) ob der ebenfalls zusammenhängende Beschriftungsbereich direkt darüber oder darunter zu finden ist. Wenn zusammenhängend in Spalten dann als Vorgabe (oder auch Auswahl) ob der ebenfalls zusammenhängende Beschriftungsbereich direkt rechts oder links daneben zu finden ist. (So der erste Gedanke)

Nun nach nochmalige Lesen des Threads stolperte ich nochmal über AW7 und den dortigen Hinweis auf "InputBox Typ 8". (Vorteil für mich: wieder etwas gelernt... da ich diese Möglichkeit noch nicht kannte.) Somit kenne ich nat. auch noch nicht die Probleme, die Charlotte_S bei der Fehlerbehandlung solcher Boxen erwähnt hat. (Hier wäre ich für den ein oder anderen Stichpunkt dankbar.) Auf den ersten (noch verschwommenen;-)) Blick ergeben sich aber meiner Meinung nach doch ein paar Möglichkeiten. Datenreihen durchgehen, je Datenreihe evtl. Abfrage ob behandeln oder nicht, wenn ja mittels Input Typ8 Bereich auswählen lassen (Prüfung ob Grösse der Bereiche identisch ist und Werte zur Beschriftung enthalten z.B.) bei Abbruch Rückfrage ob nächste Datenreihe oder KomplettAbbruch, etc. etc. Entscheidungen und Bereiche zwischenspeichern und wenn letzte Datenreihe positiv, dann mit diesen Ergebnissen die Arbeit aufnehmen. Sicher steht hier einiges an Programmieraufwand ins Haus. Aber die Aufgabe klingt mal interessant. (Zumindest bei meiner Unkenntnis der zu erwartenden Probleme ;-))

Ein Problem habe ich mit meinen Kenntnissen schon: Nach dem Lauf des Makros aus AW4 sind die Punkte entsprechend beschriftet. Ändere ich in Tabelle1 eine Beschriftung, aktualisiert sich im Diagramm nicht das entsprechende Beschriftungslabel. Zudem erhalte ich bei Selektion eines einzelnen Beschriftunglabels im Diagramm die Fehlermeldung "Die eingegebene Formel enthält einen Fehler". (Excel 2007)

bye
malSchauen
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

sorry, da hatte ich den Code nicht intensiv genug gelesen - die Anzahl ist fest vorgegeben. Die Verwendung einer Variablen in der Zeile

For j = 1 To DataSeries


impliziert, dass der Wert irgendwie per Code festgestellt wird. Das lässt sich ja auch mittels .SeriesCollection.Count problemlos realisieren.

Worum es mir jedoch mit meinem Beitrag eigentlich ging, steht in diesem einen Satz: Das Fazit daraus: der Benutzer muss irgendwie vorgeben können, wo sich seine Daten befinden und welche Datenreihen (und eventuell welche Datenpunkte) geändert werden sollen. Und das ist etwas völlig anderes als du vorgeschlagen hattest - dem Benutzer vorzuschreiben, dass die Daten sich an einer bestimmten Stelle im Tabellenblatt befinden müssen.

Lösen lässt sich das Ganze durchaus per VBA, wobei ein UserForm sicher die bessere Variante im Vergleich zu Inputboxen ist wenn es sich um mehrere Datenreihen handelt die geändert werden sollen. Mein Beitrag vom 09.11.09 17:27 bezog sich ja auf die Änderung von nur 1 Datenreihe und dort ist die Inputbox ausreichend (obwohl man das auch mit einerm UserForm lösen kann).

Bis später,
Karin
...