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

Zahlen in linksbündiger Listbox rechtsbündig

Forumthread: Zahlen in linksbündiger Listbox rechtsbündig

Zahlen in linksbündiger Listbox rechtsbündig
Daniel
Hallo
ich habe eine mehrspaltige Listbox, in der ich in Spalte 1 Texte und in Spalte 2 und 3 Zahlen darstellen will. (Beispielsweise: Parteiname, Stimmenanzahl, Anteil in Prozent)
die Texte sollen natürlich linksbündig stehen, die Zahlen natürlich rechtsbündig.
ist sowas über das Zahlenformat innerhalb einer Textbox möglich?
im Prinzip schon, wenn man führende Nullen verwendet, aber das würde ja die Lesbarkeit verschlechtern, dh ich brauche statt führender Nullen führende Leerzeichen.
Wie sieht hierzu der Definitionstring in der FORMAT-Funktion aus?
damit folgender Code:
With ListBoxWahlergebnis:
.AddItem "XYZ"
.List(0,1)=Format(100000, "xxxxxx")
.List(0,2)=Format(100000/200000, "xxx%")
.AddItem "ABCDE"
.List(1,1)=Format(2000, "xxxxxx")
.List(1,2)=Format(2000/200000, "xxx%")
End with

folgendes Ergebnis in der Listbox hat:
XYZ     100000     50%
ABCDE     2000      1%
Gruß, Daniel
Anzeige
AW: Zahlen in linksbündiger Listbox rechtsbündig
23.05.2010 15:16:40
fcs
Hallo Daniel,
möglicher Weise bekommt man es auch mit einem benutzerdefinierten Format gebacken.
Ich schlage aber folgende benutzerdefinierte Funktion vor.
Außerdem muss du für die Listbox einen Font mit fester Zeichenbreite wählen -CourierNew, FixedSys oder anderen.
Gruß
Franz
Private Sub UserForm_Initialize()
With ListBoxWahlergebnis:
.AddItem "XYZ"
.List(0, 1) = Fuellzeichen(maxLaenge:=7, sText:=Format(100000, "#,##0"))
.List(0, 2) = Fuellzeichen(maxLaenge:=4, sText:=Format(100000 / 200000, "0%"))
.AddItem "ABCDE"
.List(1, 1) = Fuellzeichen(maxLaenge:=7, sText:=Format(2000, "#,##0"))
.List(1, 2) = Fuellzeichen(maxLaenge:=4, sText:=Format(2000 / 200000, "0%"))
End With
End Sub
Function Fuellzeichen(maxLaenge As Long, sText As String, _
Optional sFuell As String = " ", Optional bKuerzen As Boolean) As String
'Füllt den Text sText bis zur maxLaenge Anzahl Zeichen mit führenden Füllzeichen auf
'sFuell = Füllzeichen - Vorgabe ist = Leerzeichen
'bKuerzen - Wenn True, dann wird der Text ggf. auf maxLaenge gekürzt
Fuellzeichen = sText
If Len(sText) > maxLaenge Then
If bKuerzen = True Then
Fuellzeichen = Left(sText, maxLaenge)
End If
ElseIf Len(sText) 

Anzeige
AW: Zahlen in linksbündiger Listbox rechtsbündig
23.05.2010 15:44:01
Daniel
Hi Franz
danke für den Hinweis.
das das über Textfunktionen mit Leerzeichen vorne dranschreiben und dann von rechts ne feste Anzahl Zeichen auschneiden funktioniert, ist mir schon klar.
die Frage ist, ob man sich diesen Aufwand sparen kann weil die FORMAT-Funktion bei entsprechender Vorgabe im Formatstring gleich das passende Ergebnis liefert.
Gruß, Daniel
Anzeige
AW: Zahlen in linksbündiger Listbox rechtsbündig
24.05.2010 08:14:37
fcs
Hallo Daniel,
wie du durch Probieren sicherlich schon festgetsellt hast, kann die Format-Funktion unter VBA nicht alle Formate umsetzen, die als Zellenformat eingestellt werden können.
Die Vba-Funktion "Format" entspricht in ihren Möglichkeiten etwa der Tabellenfunktion "TEXT".
Gruß
Franz
Anzeige
AW: Zahlen in linksbündiger Listbox rechtsbündig
24.05.2010 12:57:08
Daniel
Hi
heißt das, daß es nicht möglich ist, statt führender 0 führende " " anzugeben die an die Stellenzahl angepasst werden und man sich über die Textfunktionen behelfen muss?
Gruß, Daniel
AW: Text in rechtsbündiger Listbox linksbündig
23.05.2010 15:35:48
Gerd
Hi
...zumindest einigermaßen.
Sub a()
With ListBox1
.AddItem "XYZ"
.List(0, 0) = .List(0, 0) & String(100 - Len(.List(0, 0)), " ")
.List(0, 1) = Format(100000, "#0")
.List(0, 2) = Format(100000 / 200000, "#0%")
.AddItem "ABCDE"
.List(1, 0) = .List(1, 0) & String(100 - Len(.List(1, 0)), " ")
.List(1, 1) = Format(2000, "#0")
.List(1, 2) = Format(2000 / 200000, "#0%")
End With
End Sub
Gruß Gerd
Anzeige
AW: Oder wie das Bonbon heißt,
25.05.2010 00:27:58
Gerd
Hi,
nimm 2 (Listboxen).
Gruß Gerd
AW: Oder wie das Bonbon heißt,
26.05.2010 01:07:22
Daniel
HI,
ja danke.
so gehts natürlich auch.
die Workarounds sind mir schon klar.
ich wollte nur wissen, obs auch einfach und elegant über die Format-Funktion geht.
Gruß, Daniel
Lösung gefunden
28.05.2010 00:46:47
Daniel
Hi
mittlerweile habe ich die Lösung gefunden.
als Formel in Exceltabellen gehts über das Fragezeichen, daß stellenabhängig in Leerzellen umgewandelt wird.
=Text(1;"?0")
will man das ganze nun in VBA verwenden, stellt man fest, daß die FORMAT-Funktion das Fragezeichen nicht als Formatierungsoption beherscht.
Wenn man allerdings statt FORMAT() dann WORKSHEETFUNCTION.TEXT() verwendet, gehts wieder.
Gruß, Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zahlen in linksbündiger Listbox rechtsbündig darstellen


Schritt-für-Schritt-Anleitung

Um Zahlen in einer linksbündigen Listbox rechtsbündig darzustellen, kannst du folgende Schritte befolgen:

  1. Erstelle eine UserForm: Füge eine ListBox hinzu.

  2. Wähle einen Schriftart mit fester Zeichenbreite: Setze die Schriftart auf Courier New oder FixedSys, um die Ausrichtung der Zahlen zu gewährleisten.

  3. Füge den folgenden VBA-Code in das UserForm ein:

    Private Sub UserForm_Initialize()
       With ListBoxWahlergebnis
           .AddItem "XYZ"
           .List(0, 1) = Fuellzeichen(maxLaenge:=7, sText:=Format(100000, "#,##0"))
           .List(0, 2) = Fuellzeichen(maxLaenge:=4, sText:=Format(100000 / 200000, "0%"))
           .AddItem "ABCDE"
           .List(1, 1) = Fuellzeichen(maxLaenge:=7, sText:=Format(2000, "#,##0"))
           .List(1, 2) = Fuellzeichen(maxLaenge:=4, sText:=Format(2000 / 200000, "0%"))
       End With
    End Sub
    
    Function Fuellzeichen(maxLaenge As Long, sText As String, _
    Optional sFuell As String = " ", Optional bKuerzen As Boolean) As String
       Fuellzeichen = sText
       If Len(sText) > maxLaenge Then
           If bKuerzen = True Then
               Fuellzeichen = Left(sText, maxLaenge)
           End If
       ElseIf Len(sText) < maxLaenge Then
           Fuellzeichen = String(maxLaenge - Len(sText), sFuell) & sText
       End If
    End Function
  4. Starte das UserForm: Die ListBox zeigt nun die Texte linksbündig und die Zahlen rechtsbündig an.


Häufige Fehler und Lösungen

  • Problem: Die Zahlen erscheinen nicht rechtsbündig.

    • Lösung: Stelle sicher, dass du eine Schriftart mit fester Zeichenbreite verwendest.
  • Problem: Die FORMAT-Funktion zeigt kein gewünschtes Ergebnis.

    • Lösung: Nutze WORKSHEETFUNCTION.TEXT() anstelle von FORMAT(), um das gewünschte Format zu erreichen.

Alternative Methoden

Eine alternative Methode besteht darin, zwei ListBoxen zu verwenden, um Texte und Zahlen getrennt darzustellen. Dies kann die Lesbarkeit verbessern, ist jedoch nicht die eleganteste Lösung.

Hier ein einfaches Beispiel:

Sub a()
    With ListBox1
        .AddItem "XYZ"
        .List(0, 1) = Format(100000, "#0")
        .List(0, 2) = Format(100000 / 200000, "#0%")
    End With
End Sub

Praktische Beispiele

Hier ist ein weiteres Beispiel, um zu verdeutlichen, wie du die ListBox nutzen kannst:

Private Sub UserForm_Initialize()
    With ListBoxWahlergebnis
        .AddItem "Partei A"
        .List(0, 1) = Fuellzeichen(maxLaenge:=10, sText:=Format(50000, "#,##0"))
        .List(0, 2) = Fuellzeichen(maxLaenge:=5, sText:=Format(50000 / 200000, "0%"))
        .AddItem "Partei B"
        .List(1, 1) = Fuellzeichen(maxLaenge:=10, sText:=Format(150000, "#,##0"))
        .List(1, 2) = Fuellzeichen(maxLaenge:=5, sText:=Format(150000 / 200000, "0%"))
    End With
End Sub

Tipps für Profis

  • Verwende die String-Funktion: Du kannst die String-Funktion kombinieren, um Leerzeichen direkt vor Zahlen hinzuzufügen.
  • Experimentiere mit benutzerdefinierten Formaten: Nutze unterschiedliche Formatstrings, um die Darstellung anzupassen.
  • Nutze Format effizient: Beachte, dass die Format-Funktion in VBA nicht alle Möglichkeiten der Zellenformatierung unterstützt.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine ListBox die Zahlen immer rechtsbündig anzeigt? Stelle sicher, dass du eine Schriftart mit fester Zeichenbreite verwendest und die genannten Funktionen korrekt implementierst.

2. Ist es möglich, die Formatierung ohne VBA zu erreichen? Ja, du kannst die Formatierung auch direkt in Excel-Tabellen mit der TEXT-Funktion vornehmen, aber für ListBoxes in VBA ist der oben genannte Code notwendig.

3. Warum funktioniert die FORMAT-Funktion nicht wie erwartet? Die FORMAT-Funktion in VBA hat Einschränkungen im Vergleich zu den Zellenformatierungen. Nutze stattdessen WORKSHEETFUNCTION.TEXT(), um die gewünschten Formatierungen zu erzielen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige