Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datenbeschriftung

Datenbeschriftung
31.12.2022 17:39:17
Sven
Guten Abend zusammen,
habt ihr eine Idee, wie ich in den beiden Diagrammen die Datenbeschriftung übersichtlicher gestallten kann? Ich möchte das Überlappen verhindern.
Das manuelle verschieben ist keine Option, da ich ca 50 Diagramme dieser Art habe.
Ich hoffe, jemand kann mir weiterhelfen.
Grüße Sven
https://www.herber.de/bbs/user/157016.xlsx

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbeschriftung
31.12.2022 17:49:27
onur
" wie ich in den beiden Diagrammen die Datenbeschriftung übersichtlicher gestallten kann? " ja, einfach den Blödsinn sein lassen. Die Diagramme sollen einen Überblick geben, für genaue Daten hast du die Tabelle.
AW: Datenbeschriftung
31.12.2022 17:53:30
Sven
Die Diagramme kommen ohne die Tabelle in einen wöchentlichen Report, der als Pdf verschickt wird.
VBA Datenbeschriftung positionieren
01.01.2023 12:48:43
Beverly
Hi Sven,
man kann die Beschriftungslabel mit VBA ein wenig versetzen, aber man wird es nie 100%-ig verhindern können, das der eine oder andere Wert schlecht zu erkennen ist, zumal du Maximum und Minimum der Vertikalachse fest vorgibst, sodass über und unter dem Diagramm nicht sehr viel Platz ist. Im Diagramm links kann das Beschriftungslabel des letzten Datenpunktes ebenfalls nicht verschoben werden, da die Zeichenfläche zu klein ist.
Aber vielleicht reicht ja die mit dem folgenden Makro erzielte Positionierung trotzdem aus.

Sub Beschriftungslabel_verschieben()
Dim chrDia As ChartObject
Dim intReihen As Integer
Dim intPunkt As Integer
Dim serReihe As Series
Dim dblOben As Double
For Each chrDia In ActiveSheet.ChartObjects
With chrDia.Chart
For intReihen = 1 To .SeriesCollection.Count
Set serReihe = .SeriesCollection(intReihen)
With serReihe
.DataLabels.Orientation = xlUpward
.HasLeaderLines = False
Select Case serReihe.Name
Case "Dev. Kg"
intPunkt = Application.Match(Application.Min(.Values), .Values, 0)
dblOben = .Points(intPunkt).DataLabel.Top - 10
For intPunkt = 1 To .Points.Count
.Points(intPunkt).DataLabel.Top = dblOben
Next intPunkt
Case "Actuals"
dblOben = chrDia.Chart.PlotArea.Top
For intPunkt = 1 To .Points.Count
.Points(intPunkt).DataLabel.Left = .Points(intPunkt).DataLabel.Left - 3
.Points(intPunkt).DataLabel.Top = dblOben - .Points(intPunkt).DataLabel.Width
Next intPunkt
Case "Budget"
For intPunkt = 1 To .Points.Count
.Points(intPunkt).DataLabel.Left = .Points(intPunkt).DataLabel.Left + 3
Next intPunkt
End Select
End With
Next intReihen
End With
Next chrDia
End Sub
Bis später
Karin

Anzeige
AW: VBA Datenbeschriftung positionieren
02.01.2023 13:26:41
Sven
Hallo Karin,
vielen lieben Dank für deine Antwort. Wenn ich den Code anwende, bekomme ich eine Fehlermeldung und es werden nur die 2 obersten Diagramme geändert. Wie würde denn deiner Meinung nach die sinnvollste Formatierung für die Diagramme aussehen? Ich habe jetzt einen Auszug aus der Original Tabelle angefügt. Vielleicht kannst du mir ja helfen.
Grüße Sven
https://www.herber.de/bbs/user/157037.xlsm
AW: VBA Datenbeschriftung positionieren
02.01.2023 17:20:25
Beverly
Hi Sven,
da gibt es ein Problem mit dem Beschriftungslabel des 1. Datenpunktes der Reihe "Actuals" im 2. Diagramm - deshalb der Fehler und der Codeabbruch, weshalb nur bei den ersten beiden Diagrammen Veränderungen vorgenommen werden. Lösche bei beiden Diagrammen alle Beschriftungen und erstelle sie neu und formatiere sie so wie in den anderen Diagrammen.
Die Diagramme sehen insgesamt etwas anders aus als die in deiner vorhergehenden Mappe - deshalb habe ich noch einige Veränderungen am Code vorgenommen. Das letzte Diagramm z.B. wäre überhaupt nicht formatiert worden weil die Datenreihen einen anderen Namen haben. Der Code ist aber so ausgerichtet, dass die Positionierung in Abhängigkeit vom Reihennamen vorgenommen wird - ich konnte ja nicht ahnen, dass einige Reihen anders heißen.

Sub Beschriftungslabel_verschieben()
Dim chrDia As ChartObject
Dim intReihen As Integer
Dim intPunkt As Integer
Dim serReihe As Series
Dim dblOben As Double
Application.ScreenUpdating = False
For Each chrDia In ActiveSheet.ChartObjects
With chrDia.Chart
For intReihen = 1 To .SeriesCollection.Count
Set serReihe = .SeriesCollection(intReihen)
With serReihe
.HasLeaderLines = False
If serReihe.Name Like "Dev. Kg*" Then
.DataLabels.Position = xlLabelPositionOutsideEnd
intPunkt = Application.Match(Application.Min(.Values), .Values, 0)
dblOben = .Points(intPunkt).DataLabel.Top
On Error Resume Next
For intPunkt = 1 To .Points.Count
.Points(intPunkt).DataLabel.Top = dblOben
Next intPunkt
On Error GoTo 0
ElseIf serReihe.Name Like "Actuals*" Then
.DataLabels.Orientation = xlUpward
.DataLabels.Position = xlLabelPositionAbove
dblOben = chrDia.Chart.PlotArea.Top + 5
On Error Resume Next
For intPunkt = 1 To .Points.Count
.Points(intPunkt).DataLabel.Left = .Points(intPunkt).DataLabel.Left - 4
.Points(intPunkt).DataLabel.Top = .Points(intPunkt).DataLabel.Top + 2
Next intPunkt
On Error GoTo 0
ElseIf serReihe.Name Like "Budget*" Then
.DataLabels.Orientation = xlUpward
.DataLabels.Position = xlLabelPositionBelow
On Error Resume Next
For intPunkt = 1 To .Points.Count
.Points(intPunkt).DataLabel.Left = .Points(intPunkt).DataLabel.Left + 3
Next intPunkt
On Error GoTo 0
End If
End With
Next intReihen
.Refresh
End With
Next chrDia
Application.ScreenUpdating = True
End Sub
Bis später
Karin

Anzeige
AW: VBA Datenbeschriftung positionieren
02.01.2023 17:51:52
Sven
Hallo Karin,
jetzt funktioniert alles. Vielen Dank für deine schnelle Hilfe.
Grüße Sven
AW: Datenbeschriftung
02.01.2023 18:29:37
Daniel
HI
am Übersichtlichsten wird es, wenn du die Werte aus dem Diagramm rausnimmst und in einer Tabelle unter dem Diagramm darstellst.
das geht relativ einfach über das Menü Diagrammentwurf - Diagrammelement hinzufügen - Datentabelle
dann steht die Tabelle im Diagramm drin und Excel macht das automatisch, so dass du nichts mehr hinzufügen oder verändern musst und dein bisheriger Ablauf zum erstellen der PDFs bleibt unverändert.
In dieser Tabelle stehen dann auch nur die Werte, die im jeweiligen Diagramm angezeigt werden.
ansonsten wirds aufwendig.
wenn alle Zahlen sichbar bleiben sollen, würde ich so vorgehen, dass bspw die Werte der Säulen (Differenz) nicht an der Säule sondern auf einer Linie dargestellt werden. Sowas kann dadurch erreichen, dass man als Datenbeschriftung nicht nur die für die Darstellung verwendeten Werte verwenden kann, sondern Werte aus einer weiteren Spalte.
dh wenn du für die Beschriftung der Delta-Werte immer da Minimum der Delta-Werte - 1000 verwendest, kannst du diese immer auf einer Linie unterhalb der Daten darstellen. Es erfordert halt zusätzliche Datenreihe(n), aber so würde zumindest mal einen der drei Datenreihen rausnehmen.
um dann bei den beiden anderen Datenreihen für mehr Übersicht zu sorgen müsstest du so vorgehen:
1. bei beiden Datenreihen die Datenbeschriftung grundsätzlich oberhalb platzieren.
2. mit einer Schleife über die Werte gehen und schauen, wie dicht die Werte bei einander liegen und wenn sie zu dicht liegen, bei der Datenreihe mit dem kleineren Wert den Datenpunkt unterhalb anzeigen lassen
das würde dann dieser Code für das Diagramm 4 machen (anpassen für die weiteren diagramme sollte kein Problem sein)
der Code schiebt erstmal alle Beschriftungen nach oben.
Wenn dann die Datenpunkte eng bei einander liegen, werden die Werte der kleineren Datenreihe unterhalb angezeigt, was die Darstellung etwas entzerrt

Sub Makro3()
Dim arr1, arr3
Dim i As Long
ActiveSheet.ChartObjects("Diagramm 4").Activate
With ActiveChart
.FullSeriesCollection(1).DataLabels.Position = xlLabelPositionAbove
.FullSeriesCollection(3).DataLabels.Position = xlLabelPositionAbove
arr1 = .FullSeriesCollection(1).Values
arr3 = .FullSeriesCollection(3).Values
For i = 1 To UBound(arr1)
If Abs(arr1(i) - arr3(i)) 
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige