Sehr geehrte Damen und Herren!
Ich habe mit Excel 2016 ein kombiniertes Balken und Punktdiagramm angelegt, bei dem die Werte von 2 Bevölkerungsprognosen miteinander verglichen werden. In meiner Grafik tauchen dann neben den Datenpunkten auch die dazugehörigen Werte (%-Abweichungen) auf. Diese werden dann dynamisch entweder links oder rechts positioniert (je nachdem, welcher Werte höher ist). Das funktioniert bei mir auch alles gut.
Ich möchte in meinem Diagramm als Datenbeschriftung eines Balkens auch noch absolute Werte mit aufnehmen. Ich habe hier einen Auszug aus meiner Datei als Anhang beigefügt. In der Spalte J möchte ich zweierlei erreichen:
1) als erstes soll die niedrigere Zahl auftauchen – danach die höhere Zahl
2) außerdem sollen die Farben (blau bzw. rot) aus dem Datenbereich C5:F27 automatisch berücksichtigt werden.
Beispiel:
Bei der Gemeinde A soll in der Zelle J5 also zunächst die Zahl 16.385 in blauer Schriftfarbe und nach dem Trennzeichen die Zahl 16.698 in roter Schriftfarbe erscheinen.
Bei der Gemeinde C sollte in der Zelle J7 dann zunächst die Zahl 9.106 in roter Schriftfarbe und nach dem Trennzeichen die Zahl 9.329 in blauer Schriftfarbe erscheinen.
Geht das mit Excel? Können Sie mir sagen, wie ich das umsetzen muss?
Herzlichen Dank im Voraus.
Viele Grüße
Bernward Lefken
Sehr gehrter Herr Lefken,
Sie können die gewünschte Zweifarbigkeit mit Hilfe des folgenden VBA-Programms erzeugen:
Sub ZweiFarben()
Dim farbe1 As Long
Dim farbe2 As Long
Dim letzteZeile As Long
Dim länge As Long
Dim positionTZ As Long ´ Position des Trennzeichens
Dim wert1 As Double
Dim wert2 As Double
Dim ws As Worksheet
Dim zeile As Long
Dim zelle As Range
Set ws = ThisWorkbook.Worksheets(1)
letzteZeile = ws.Cells(ws.Rows.Count, „B“).End(xlUp).Row
If letzteZeile < 5 Then Exit Sub
´ Bisherigen Inhalt löschen
With ws.Range("J5").Resize(letzteZeile - 4)
.ClearContents
.Font.ColorIndex = xlAutomatic
End With
For zeile = 5 To letzteZeile
If ws.Cells(zeile, "G") <= ws.Cells(zeile, "H") Then
wert1 = ws.Cells(zeile, "G")
wert2 = ws.Cells(zeile, "H")
farbe1 = ws.Cells(zeile, "G").Font.ColorIndex
farbe2 = ws.Cells(zeile, "H").Font.ColorIndex
Else
wert1 = ws.Cells(zeile, "H")
wert2 = ws.Cells(zeile, "G")
farbe1 = ws.Cells(zeile, "H").Font.ColorIndex
farbe2 = ws.Cells(zeile, "G").Font.ColorIndex
End If
Set zelle = ws.Cells(zeile, "J")
zelle = Format$(wert1, "#,##0") & " | " & Format$(wert2, "#,##0")
länge = Len(zelle)
positionTZ = InStr(1, zelle, " | ")
zelle.Characters(Start:=1, Length:=positionTZ - 1).Font.ColorIndex = farbe1
zelle.Characters(Start:=positionTZ + 3, Length:=länge - positionTZ - 2) _
.Font.ColorIndex = farbe2
Next zeile
End Sub
Ich habe das Programm in die in der Anlage beigefügte Arbeitsmappe eingefügt.
Die Arbeitsmappe ist in gezippter Form beigefügt. da hier keine xlsm-Dateien erlaubt sind.
Mit freundlichen Grüßen
Dieter Klemle