Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kreisdiagramm: Beschriftung positionieren

Kreisdiagramm: Beschriftung positionieren
10.08.2007 11:58:00
uli
Hallo Excel-Gemeinde
Folgendes Problem:
Habe in einem Dokument ca. 200 Kreisdiagramme die jeweils aus 4 "Kuchenstücken" bestehen. Per Makro werden nun die für die Kreisdiagramme relevanten Daten in bestimmte Zellen kopiert, die den Datenbereich für die Diagramme bilden (Natürlich für jedes Diagramm ein unterschiedlicher Bereich). Die Kuchenstücke sind mit Kategoriename, Wert und Prozentsatz beschriftet.
Jetzt kommt es oft vor, das zwei oder mehrere Kuchenstücke so klein sind, dass sich die Beschriftung überschneidet.
Gibt es eine Möglichkeit, dass per Makroanweisung zu verhindern?
Gruß
Uli

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
bitte Mappe hochladen (o.W.)
10.08.2007 13:46:00
Bernd
o.W.

AW: bitte Mappe hochladen (o.W.)
10.08.2007 15:16:00
uli
Hallo Bernd,
habe ich gerade versucht, klappt leider nicht. Die Datei (c:\Muster.xls) ruft den Fehler "ungültiger Dateiname" hervor. Wahrscheinlich ist sie mit fast 600kb aber auch einfach zu groß.
Habe daher ein Beispiel mit einem Kreisdiagramm hochgeladen.
https://www.herber.de/bbs/user/44941.xls
Das Programm, dass ich bastel, sieht im endeffekt so aus:
1. Eine Musterdatei enthalt ein Kreisdiagramm (und sonstigen Kram, der hier allerdings nicht so wichtig ist)
2. In der Hauptarbeitsmappe wird ermittelt, wie viele Kreisdiagramme benötigt werden
3. In der Musterdatei wird das Kreisdiagramm dementsprechend oft untereinander kopiert (Zeilen von 1 bis 40 werden kopiert und in Zeile 41,81,121 usw. eingefügt)
4. In der Musterdatei wird jedem Kreisdiagramm der Bereich für dessen Quelldaten zugeordnet
5. Aus einer dritten Datei werden die benötigten Quelldaten in den Bereich jedes einzelnen Diagrammes kopiert
In folgendem Makro sind die Schritte 2 bis 4 dargestellt. Da ich eh jedes Diagramm aktiviere, wäre es praktisch, wenn es eine Möglichkeit geben würde, durch eine Anweisung die Beschriftungen zu so verteilen, dass sie nicht übereinanderstehen. Ich hoffe meine Beispieldatei hilft da ein bisschen weiter. Eigentlich sollte es ja kein Unterschied sein, ob man es für ein oder max. 282 Diagramme macht.
Hier der Code für das Vorbereiten der Musterdatei (wird aus der Hauptdatei ausgeführt):

Sub Muster_vorbereiten()
Dim bereich As Range
Dim Zeilen As Integer
Dim dateiname As Variant
Dim durchlauf As Long
Dim diagramm As ChartObject
Dim DAnfang As Long
Dim DEnde As Long
Application.ScreenUpdating = False
durchlauf = 1
dateiname = ThisWorkbook.Name
Windows(dateiname).Activate
Set bereich = Sheets(3).Columns(1)
'Zähl der benötigten Musterseiten ermitteln
Zeilen = Application.WorksheetFunction.CountIf(bereich, "KP*") _
+ Application.WorksheetFunction.CountIf(bereich, "UP*")
'Kopieren der benötigten Musterseiten
For i = 1 To Zeilen - 1
On Error GoTo ende
Windows("Muster.xls").Activate
Cells(durchlauf, 1).Select
ActiveCell.Range("a1:i40").Select
Selection.Copy
Cells(durchlauf + 40, 1).Select
ActiveSheet.Paste
durchlauf = durchlauf + 40
Next i
On Error GoTo ende
Windows("Muster.xls").Activate
z = 1
For Each diagramm In ActiveSheet.ChartObjects
diagramm.Name = "Diagramm " & z
z = z + 1
Next
DAnfang = 34
DEnde = 37
'Datenbereich der Diagramme bestimmen
For n = 1 To Zeilen
Range("a1").Select
ActiveSheet.ChartObjects("Diagramm " & n).Activate
ActiveChart.ChartArea.Select
ActiveChart.SetSourceData Source:=Sheets("Präsentation A").Range("D" & DAnfang & ":e" &  _
DEnde), _
PlotBy:=xlColumns
DAnfang = DAnfang + 40
DEnde = DEnde + 40
Next n
Range("a1").Select
Windows(dateiname).Activate
ende:
Application.ScreenUpdating = True
End Sub


Anzeige
AW: bitte Mappe hochladen (o.W.)
11.08.2007 11:20:32
fcs
Hallo Uli,
es gibt keinen allgemeinen Befehl, der solche Text-Überlagerungen verhindert. Grundsätzlich kann man den Beschriftungstext per Makro positionieren (relativ zum Diagrammrahmen). Der aufgezeichnete Code für 1. und 4. Datenpunkt sieht beispielweise so aus:

Sub Beschriftung()
ActiveSheet.ChartObjects("Diagramm 3").Activate
ActiveChart.SeriesCollection(1).DataLabels.Select
ActiveChart.SeriesCollection(1).Points(1).DataLabel.Select
Selection.Left = 75
Selection.Top = 20
ActiveChart.SeriesCollection(1).Points(4).DataLabel.Select
Selection.Left = 81
Selection.Top = 156
End Sub


Jetzt müßte der Code so erstellt werden, dass in einer For...Next Schleife alle Datenpunkte des jeweiligen Diagramms abgearbeitet werden. Ausgehend vom 1. Datenpunkt, der immer oben im Uhrzeigersinn beginnt muss jetzt abhängig von der Größe des Kuchenstücks (Prozentwert) und der Position des Kuchenstücks (Summe der Prozentwerte der vorherigen Stücke + halber Prozentwert des Stücks) die Position der Beschriftung (Top und Left) festgelegt werden. Das dürfte einen ziemlichen Wust an Select Case bzw. If-Anweisungen ergeben.
Meiner Meinung nach ist es einfacher/übersichtlicher im Musterdiagramm die Führungslinien und Beschriftungsfelder einmal einigermassen ordentlich für kleine Werte zu positionieren. Den Kategorienamen würde ich in der Datenbeschriftung weglassen, insbesondere da diese ja zum Teil auch sehr lang sind.
Statt dessen die Legende unten anzeigen und das Legendsymbol vor den Beschriftungen anzeigen.
Gruß
Franz

Anzeige
AW: bitte Mappe hochladen (o.W.)
11.08.2007 17:17:00
uli
Hallo Franz,
die Idee mit der einzelnen Berechnung der Positionien hab ich auch schon gehabt. Habe sogar schon mit der Berechnung angefangen, aber auch schnell wieder aufgegeben. Das war wirklich viel zu umfangreich.
Werde jetzt wahrscheinlich deinen Tip mit der Legende verwenden und vorher die Beschriftung einigermaßen zurechtrücken. Das wird dann auch bei 90% der Diagramme passen, da die Werte 1 bis 3 meistens sehr klein sind und zusammen nur max. 20 % einnehmen. Da wo es nicht passt, muss man halt noch mal nachkorrigieren.
Vielen Dank für deine Hilfe.
Gruß
Uli
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Kreisdiagramm: Beschriftung positionieren


Schritt-für-Schritt-Anleitung

  1. Kreisdiagramm erstellen: Erstelle zunächst ein einfaches Kreisdiagramm in Excel. Du kannst dies tun, indem du die gewünschten Daten auswählst und dann unter dem Reiter „Einfügen“ das „Kreisdiagramm“ wählst.

  2. Datenbeschriftungen hinzufügen: Klicke auf das Diagramm, gehe auf „Diagrammelemente hinzufügen“ und wähle „Datenbeschriftungen“. Hier kannst du die Beschriftungen für die einzelnen „Kuchenstücke“ hinzufügen.

  3. Beschriftung positionieren: Um die Beschriftungen außerhalb des Kreises zu positionieren, klicke auf das Diagramm, gehe zu „Datenbeschriftungen“ und wähle „Datenbeschriftung formatieren“. Hier kannst du die Position der Beschriftungen anpassen (z.B. „Außerhalb“).

  4. Führungslinien einfügen: Falls die Beschriftungen zu nah an den Diagrammsegmenten sind, kannst du „Führungslinien“ hinzufügen. Klicke auf die Datenbeschriftungen und wähle „Führungslinien hinzufügen“ aus dem Kontextmenü.

  5. Makro zur automatischen Positionierung erstellen: Wenn du mehrere Kreisdiagramme hast und die Beschriftungen automatisiert positionieren möchtest, kannst du ein VBA-Makro verwenden. Beispiel:

    Sub BeschriftungPositionieren()
       Dim diagramm As ChartObject
       For Each diagramm In ActiveSheet.ChartObjects
           With diagramm.Chart
               ' Hier die Logik zur automatischen Positionierung implementieren
           End With
       Next diagramm
    End Sub

Häufige Fehler und Lösungen

  • Überlappende Beschriftungen: Wenn die Beschriftungen sich überlappen, prüfe die Größe der Diagrammsegmente. Kleinere Werte sollten eventuell in der Legende angezeigt werden, um Platz zu sparen.

  • Falsche Positionierung: Stelle sicher, dass die Datenbeschriftungen korrekt formatiert sind. Nutze die Option „Datenbeschriftung formatieren“ und wähle die richtige Position.

  • Makrofehler: Wenn das Makro nicht funktioniert, überprüfe den Code auf Syntaxfehler oder falsche Diagrammreferenzen.


Alternative Methoden

  • Excel Diagramm Datenbeschriftung außerhalb: Du kannst auch die Beschriftungen manuell verschieben, indem du sie auswählst und ziehst.

  • Legende außerhalb des Diagramms: Um die Legende außerhalb des Diagramms zu platzieren, klicke auf die Legende und ziehe sie an die gewünschte Position.

  • Kreisdiagramm beschriften: Alternativ kannst du auch „Kreisdiagramm beschriften“ verwenden, um die Beschriftungen direkt im Diagramm zu positionieren, anstatt sie außerhalb zu platzieren.


Praktische Beispiele

  • Beispiel 1: Ein Kreisdiagramm, das die Verkaufszahlen eines Produkts zeigt. Verwende die Legende, um die kleineren Werte darzustellen, während die größeren Werte direkt beschriftet werden.

  • Beispiel 2: Ein Diagramm mit mehreren Kreisdiagrammen in einem Diagramm. Hier ist es wichtig, die Beschriftungen sorgfältig zu positionieren, um die Übersichtlichkeit zu bewahren.


Tipps für Profis

  • Datenbeschriftung positionieren: Nutze die „Datenbeschriftung formatieren“-Option, um die Position präzise anzupassen.

  • VBA zur Automatisierung: Wenn du regelmäßig mit mehreren Diagrammen arbeitest, investiere Zeit in das Erstellen von VBA-Skripten zur Automatisierung der Positionierung.

  • Kreisdiagramme optimieren: Achte darauf, dass die Beschriftungen nicht zu lang sind. Kürze sie, um eine bessere Lesbarkeit zu gewährleisten.


FAQ: Häufige Fragen

1. Wie kann ich die Datenbeschriftungen außerhalb des Kreises positionieren?
Gehe auf „Datenbeschriftung formatieren“ und wähle die Option „Außerhalb“.

2. Was tun, wenn sich die Beschriftungen überlappen?
Überprüfe die Werte der Diagrammsegmente und ziehe in Betracht, kleinere Werte in der Legende anzuzeigen, anstatt sie zu beschriften.

3. Wie kann ich mehrere Kreisdiagramme in einem Diagramm verwalten?
Nutze VBA, um eine Schleife zu erstellen, die alle Diagramme durchläuft und die Beschriftungen für jedes Diagramm anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige