8.8k 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 beverly Experte (3.5k Punkte)
Hi Charlotte,

verknüpfe jedes Bechriftungslabel von Hand mit der Zelle, in welcher der Anzeigewert steht: Beschriftungslabel einzeln markieren, dann "=" (ohne Anführungszeichen) schreiben, Cursor in die Zelle mit dem Anzeigetext setzen und Enter drücken.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin,

guten Morgen! Eine ähnliche Antwort von Dir hatte ich bereits woanders gefunden und auch einen Verweis auf http://support.microsoft.com/kb/213750/de, aber beide Lösungsmöglichkeiten sind nicht richtig befriedigend.

Bei einer größeren Anzahl von Datenreihen und Punkten ist das Umlabeln von Hand kaum zu schaffen und das Makro von MS habe ich im Moment erst soweit angepasst, dass es mir die Beschriftungstexte statisch zuweist, anstatt einen Bezug auf die Zellen herzustellen. In dem VBA-Ansatz mache ich jetzt erstmal weiter.

Aber insgesamt wäre eine Lösung mit "normalen" Excel-Mitteln besser. Selbst eine etwas aufwändigere "Bastellösung" mit einer zusätzlichen Datenreihe o. ä. und irgendwas ein- oder ausblenden wäre besser, denn es müssen verschiedene Leute an unterschiedlichen Arbeitsplätzen auf Dauer damit arbeiten, und da würde es mit einem VBA-Makro immer ("menschliche") Probleme geben. Die "Normallösung" dagegen könnte man als Arbeitsanleitung hinterlegen und jeder könnte sie mit normalen Excel-Mitteln immer wieder reproduzieren. Mit VBA ist das nicht so.

Deshalb meine Frage an Dich: Kannst Du aufgrund Deiner Erfahrung halbwegs sicher ausschließen, dass es eine (Bastel-)Lösung mit Diagramm-Assistent und nachträglicher Formatierung o. ä. und mit einem vertretbaren Aufwand an Handarbeit gibt? Was meinst Du, soll ich in dieser Richtung weitersuchen oder aufhören? In einem anderen Forum vielleicht?

Diese Fragen sind bestimmt nicht leicht und nicht eindeutig zu beantworten, aber mich würde Deine Meinung trotzdem sehr interessieren.

Danke im Voraus!
Charlotte
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Charlotte,

es geht nur mit "Handarbeit" oder halt mit VBA - im Diagrammassistenten oder anderen Funktionalitäten von Excel gibt es keine Möglichkeit.

Deinen VBA-Ansatz kenne ich leider nicht, aber mal als Hinweis: weise die Zelle über die R1C1-Adresse zu.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin,

schade, dass es die von mir bevorzugte konventionelle Lösung nicht gibt oder sie noch niemand gefunden hat. Aber die Jahre an "Forschungsarbeit", die Du und andere schon geleistet haben, kann ich in ein paar Tagen sowieso nicht aufholen, deswegen habe statt rumzubasteln mich an einem VBA-Makro versucht. Vom Prinzip her funktioniert es erstmal, aber natürlich muss es noch angepasst werden. Die Ausgangsdaten sind:
Datenreihe1: K4:K10
Datenreihe1: L4:L10
Datenreihe1: M4:M10
Datenreihe1: N4:N10
Beschriftung zu Datenreihe1: O4:O10
Beschriftung zu Datenreihe2: P4:P10
Beschriftung zu Datenreihe3: Q4:Q10
Beschriftung zu Datenreihe4: R4:R10

Das Makro funktioniert in beiden Fällen, egal ob das (Linien-)Diagramm als Objekt in "Tabelle1" oder als neues Blatt "Diagramm1" eingefügt wurde.

Sub AttachCellsAsLabels()
Dim i As Integer, j As Integer, DataSeries As Integer, xVals As String

' Disable screen updating while the subroutine is run.
Application.ScreenUpdating = False

If ActiveChart Is Nothing Then ActiveSheet.ChartObjects(1).Select

'Store the formula for the first series in "xVals".
xVals = ActiveChart.SeriesCollection(1).Formula
'Extract the range for the data from xVals.
xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, Mid(Left(xVals, InStr(xVals, "!") - 1), 9)))
xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1)
Do While Left(xVals, 1) = ","
xVals = Mid(xVals, 2)
Loop

DataSeries = 4 ' Number of DataSeries to be labeled, first text label in R4C15
For i = 1 To Range(xVals).Cells.Count
For j = 1 To DataSeries
ActiveChart.SeriesCollection(j).Points(i).HasDataLabel = True
ActiveChart.SeriesCollection(j).Points(i).DataLabel.Text = "=Tabelle1!R" & CStr(i + 3) & "C" & CStr(j + 14)
Next j
Next i

Application.ScreenUpdating = True

End Sub


So, nun müsste man das Makro nur noch so anpassen, dass es [...] sicher funktioniert, und den Benutzern klarmachen, was sie zu tun und zu lassen haben. Eine schöne Aufgabe ...

Vielen Dank für Deine Hilfe und bis zum nächsten Mal!
Charlotte
0 Punkte
Beantwortet von
Sorry, Fehlerkorrekturen:

... deswegen habe ich statt rumzubasteln mich an einem VBA-Makro versucht.

Die Ausgangsdaten sind:
Datenreihe1: K4:K10
Datenreihe2: L4:L10
Datenreihe3: M4:M10
Datenreihe4: N4:N10
Beschriftung zu Datenreihe1: O4:O10
Beschriftung zu Datenreihe2: P4:P10
Beschriftung zu Datenreihe3: Q4:Q10
Beschriftung zu Datenreihe4: R4:R10

Muss mir die Vorschau genauer ansehen. - Gruß, Charlotte
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Charlotte,

in deinem Makro ist der Zellbereich für die Beschriftung der Datenreihen fest vorgegeben - ich würde anders vorgehen, und zwar immer nur 1 Datenreihe beschriften. Man kann dazu z.B. zuerst in einer Inputbox die Nummer (oder den Namen) der zu ändernden Datenreihe abfragen und dann noch in einer weiteren Inputbox den Zellbereich für die Beschriftung. Anschließend läuft man in einer Schleife über alle Zellen dieses Bereichs. Aus den einzelnen Zellen kann man ja jeweils ihre Adresse bzw. ihre Zeilen- und Spaltennummer ermitteln, die man dann als Variable für Zeile bzw. Spalte bei der Zellzuweisung im R1C1-Format verwendet.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin,

da hast Du recht, die feste Zuordnung des Bereichs mit den Beschriftungen muss ich natürlich noch ändern. Das ist unter anderm das, was ich mit "anpassen" meinte.

Da muss ich sehen, dass ich ein gutes Verhältnis finde zwischen einigen Voraussetzungen, die die Benutzer erfüllen müssen und die das Makro nur noch abarbeiten muss, und anderen Dingen, die das Makro abfragt und die die Benutzer dann erst individuell auswählen oder entscheiden. Dadurch entsteht dann richtig viel Arbeit für das Makro bzw. für denjenigen, der es schreibt. (Was mir wohl leider nicht erspart bleiben wird.)

Bei der Abfrage nach dem Bereich der Daten und dem zugehörigen Bereich der Beschriftungen würde ich ja am liebsten die Bereiche nacheinander von den Benutzern markieren lassen, aber ich erinnere mich, dass ich in der Vergangenheit größere Probleme mit solchen Inputboxen vom Typ 8 hatte, weil sich Fehler schlecht behandeln ließen. Die einfachere Bitte "Geben Sie den Bereich ... in der Form X4:Xnnn an" ist dagegen für einige Benutzer schon eine Zumutung, für andere eine Überforderung, insbesondere dann, wenn sie das für 20, 30 oder 40 Datenreihen, also insgesamt 40, 60 oder 80 mal nacheinander fehlerfrei tun sollen.

Was nutzt es dann praktisch, wenn ich für den Fall eines Eingabefehlers - sagen wir nach der Hälfte der Datenreihen - einen sauberen Abbruch programmiere, die Leute an der Stelle nicht weiterwissen und am Ende über das "blöde Makro" (oder gar über mich) meckern? Es ist nicht ganz leicht, es anderen leicht machen zu wollen.

In diesem Sinne mache ich mich gleich mal an die Arbeit: Leute fragen, was gewünscht wird und was zumutbar ist.

Freundliche Grüße, bis morgen,
Charlotte
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Charlotte,

nicht alle Datenbereiche auf einmal eingeben, sondern immer nur einen Bereich für eine Datenreihe und diese dann beschriften - dann die nächste. Es ist nun mal im Leben so, dass es die "gefiederte eierlegende Wollmilchsau" nicht gibt ;-))))

Bis später,
Karin
0 Punkte
Beantwortet von
Hi,

Was wären denn die Grundvorraussetzungen und/oder zumutbaren Bedingungen?

Ist es denn z.B. möglich als Bedingung vorzugeben, dass die Datenreihen (Anzahl variabel) in einem zusammenhängenden Bereich (der Bereich an sich variabel) liegen müssen?
z.B. bei 6 Datenreihen von SpalteA bis SpalteF? oder auch mal SpalteJ bis SpalteP?
Ist es in diesem Fall weiterhin möglich als zweite Bedingung vorzugeben, dass der Bereich der Beschriftungen direkt rechts neben den Datenreihen anschliessen muss?
-also im Falle Datenreihen A-F Beschriftung dann Fix in G-L. Im Falle Daten in J-P Beschriftung in Q-V.

Oder aber, wenn die Datenreihen nicht zusammenhängend sein können, dass dann wenigstens als Vorgabe die jeweilige Beschriftung in der direkt rechts anschliessenden Zelle zu stehen hat.
z.B.
-Datenreihe1: Tabelle1!A3-A10, zugehörige Beschriftung in Tabelle1!B3-B10
-Datenreihe2: Tabelle1!D13-D20, zugehörige Beschriftung in Tabelle1!E13-E20
-Datenreihe3: Tabelle2!AS23-AS40, zugehörige Beschriftung in Tabelle2!AT23-AT40
-Datenreihe4: Tabelle1!AB3-AB10, zugehörige Beschriftung in Tabelle1!AC3-AC10
.
.
.

Ich stelle mir da so in etwa folgenden Ablauf für ein Makro vor:
- gehe Datenreihe für Datenreihe des Diagramms durch (für alle Datereihen im Diagramm)
- Ermittle für die jeweilige Datenreihe die Quelle der Datenpunkte (z.B.Tabelle1!A3-A10)
- Suche für jeden dieser Punkte in definiertem Abstand die Beschriftung. (beim zusammenhängenden Bereich wäre das Beschriftung = DatenwertSpalte+Anzahl Datenreihen + evtl. einen fixen Offset, bei variablen Bereichen wäre das Beschriftung = DatenwertSpalte+1)

So könnte ich mir, ohne es getestet zu haben, vorstellen, dass das Makro recht variabel auf das Diagramm reagieren kann um die entsprechenden Beschriftung im Diagramm vorzunehmen.
Also variable Anzahl von Datenreihen, variable Anzahl von Datenpunkten in den Reihen, und variable Bereiche für die Werte der Datenreihen.

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

was du beschrieben hast, macht Charlotte's Code bereits - er ermittelt den Wertebereich des Diagramms, daraus die Anzahl der Datenreihen und übernimmt aus einem Offset-Bereich dann die Beschriftungen.

Aus dieser generellen Vorgehensweise, ergibt sich m.E. jedoch folgende Frage bzw. folgendes Grundproblem:

man legt sich darauf fest, dass die Werte und die Beschriftungen spaltenweise angeordnet sind - was aber, wenn die Daten zeilenweise stehen? Oder wenn die Diagrammwerte Spalten- und die Beschriftungswerte Zeilenweise oder umgekehrt angeordnet sind?

Man sollte dem Benutzer schon so viel Freiheit lassen, seinen Tabellenaufbau so zu gestalten wie er es für richtig hält bzw. wie es seine Bedingungen erfordern. Folglich muss man entweder mehrere Varianten in den Code einbauen oder man ändert den Code je nach Bedingung - aber dazu muss man schon wieder eine ganze Menge von VBA verstehen, was man ja nicht bei jedem Benutzer voraussetzen darf (und kann). 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.

Bis später,
Karin
...