Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
384to388
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
384to388
384to388
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zahlen in Listen ausrichten

Zahlen in Listen ausrichten
23.02.2004 11:02:44
stefan
Hallo,
ich muss in nächster Zeit viele Excel-Tabellen erstellen und habe auch nach intensiver Recherche im Netz noch keine ideale Lösung für ein an sich einfach scheinendes Problem gefunden.
Meine Daten stehen spaltenweise untereinander, wobei die Daten einer Spalte die gleiche Anzahl Nachkommastellen, aber eine unterschiedliche Anzahl von Vorkommastellen aufweisen.
Diese Daten möchte ich nun in der Spalte zentrieren, die Zahlen sollten aber gleichzeitig an der letzten Stelle bündig untereinander stehen.
Das Zentrieren sollte sich sinnvollerweise auf die Zahl(en) mit den meisten Stellen in der Spalte beziehen, die anderen Zahlen werden dann rechtsbündig daran ausgerichtet.
Den gewünschten Effekt bekommt man in etwa mit den benutzerdefinierten Zahlenformaten hin, wenn man die Zahlen rechtsbündig in der Spalte ausrichtet und eine passende Zahl von Leerstellen hinter das Zahlenformat setzt.
Das ist aber sehr aufwändig und auch bei Layoutveränderungen der Tabelle problemtatisch.
Gibt es da noch einen besseren Weg?
Stefan

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlen in Listen ausrichten
23.02.2004 11:12:25
Alex K.
Hallo Stefan,
wie ist es, das benutzerdefinierte Format "#.##0,00000" und die Ausrichtung der Zelle auf "zentriert" zu setzen. Schönheitsfehler hierbei, die Zahlen werden halt immer mit 5 bzw. x Nachkommastellen dargestellt.
...leider nicht nur ein Schönheitsfehler
23.02.2004 11:27:50
Stefan
Die Tabellen sind für die Publikation vorgesehen, deshalb kann ich an den Kommastellen leider nichts drehen. Aber Danke für den Tipp.
Nach allem, was ich bisher so probiert habe, scheint der Zentrierbefehl stets die Ausrichtung per benutzerdefiniertem Zahlenformat zu definieren. Genau weiss ichs aber nicht. Damit dürfte es dann wohl nicht klappen.
Stefan
Anzeige
AW: Benutzerdefiniertes Zahlenformat
23.02.2004 11:42:46
Galenzo
Hallo,
nimmst du das
Benutzerdefinierte Zahlenformat 0,????
Die Anzahl der Fragezeichen ist dabei die maximal auftretende Stellenzahl.
mfg
Doch nicht so ganz trivial :-))
23.02.2004 12:10:24
Stefan
Die Nachkommastellen sind ja spaltenweise einheitlich, deshalb kann man da dann auch 0,0 oder 0,00 als Zahlenformat nehmen.
Aber wie bekommt man die Zahlen rechtsbündig untereinander und gleichzeitig mittig in die Spalte?
AW: Doch nicht so ganz trivial :-))
23.02.2004 12:16:06
Alex K.
Hallo Stefan,
sorry, aber was soll das.
Meine Lösung:
Zentrieren + Zahlenformat 0,00 für 2 Nachkommstellen oder 0,000 für 3 Nachkommastellen
wenn 0 in Nachkommastellen nicht angezeigt werden sollen, dann Galenzo Lösung
Zentrieren + Zahlenformat 0,?? für 2 Nachkommastellen
beide funktionieren wunderbar, wo ist nun das Problem?
Anzeige
Sorry Stefan, war auf dem falschen Dampfer :-)
23.02.2004 12:19:48
Alex K.
Vergiss vorheriges Posting, hat ein Verständnisproblem.
AW: Sorry Stefan, war auf dem falschen Dampfer :-)
23.02.2004 13:53:25
stefan
Ich hab das Ganze in einer Excel-Datei dargestellt um es anschaulicher zu machen.
https://www.herber.de/bbs/user/3890.xls
Vielleicht hat ja jemand noch eine Idee. Wär schön.
Mir kommt es nur komisch vor, dass ich dazu nichts finden konnte, wo dies doch eigentlich eine Standardform der Publikation von Daten ist.
Muchos gracias
Stefan
an Stefan - LÖSUNG !!!!
24.02.2004 09:58:20
Alex K.
Hallo Stefan,
hier ein Lösungsvorschlag. Zur Formatierung das Makro "NumCenter" starten und alle Spalten mit einem bestimmten Namen in der Arbeitsmappe werden formatiert.
Das Makro macht nichts anderes, als zu errechnen, wieviel Leerzeichen an das Zahlenformat angehängt werden müssen, damit bei rechtsbündiger Ausrichtung die Zahl einigermassen in der Mitte der Spalte steht. Also ein Format '0,000' wird in '0,000" "' umgewandelt.
Zur Vorbereitung musst du alle Spalten bzw. Zellbereiche, welche zu formatierende Zahlen enthalten, folgendermassen bearbeiten:
1) Vergib ein Zahlenformat, welches die max. Anzahl an Nachkommastellen berücksichtigt. Also z.B. für Zahlen mit drei Nachkommastellen ein "#.##0,000"
2) Vergib für die gesammte Spalte bzw. für einen bestimmten Spaltenbereich einen Namen, welcher mit "NumFormat" beginnen muss. Also z.B. Spalte A bekommt den Namen "NumFormat1", Spaltenbereich B10:B100 bekommt den Namen "NumFormatAuswertung". Wichtig ist hier, dass der Name sich immer nur auf EINE Spalte beziehen darf. Wenn du eine ganze Spalte benennst, wird die Zeile mit der ersten Zahl gesucht und von da ab bis zur letzten Zeile das Zahlenformat vergeben. Wenn du einen Spaltenbereich benennst, so wird nur für diesen Bereich ein Zahlenformat angelegt.
Nachteil an der Lösung ist, dass diese nicht automatisch startet, wenn du die Breite einer Zelle änderst. Leider bekommt man in Excel VBA dieses Ereignis nicht mit :-(
So musst du das Makro bei Änderungen in der Spaltenbreite immer von Hand starten. Ich hoffe, dies ist praktikabel.
Ausserdem funktioniert das Ganze nicht, wenn die Nachkommzellen in verbundenen Zellen stehen. Falls du solche Fälle hast, dann melde dich, ich versuche dann, dies ebenfalls zu lösen.
Bitte den nachfolgenden Code in ein Modul im VBA-Editor kopieren. Hierzu über das Menü "Extras -> Visual Baisc Editor" den VBA Editor starten. Dort im Menü "Einfügen -> Modul" ein neues Modul anlegen. Es geht ein Fenster mit der Beschriftung "... Modul1 (Code)" auf. Dort den nachfolgenden Code einfügen. Dann kannst du in Excel über Menü "Extras -> Makro" und Anwahl von "NumCenter" die Formatierung starten.

Option Explicit
Private Const AKNumFormat = "NumFormat"
Private Const AKFormatChar = " "
Public Sub NumCenter()
Dim numRng          As Range
Dim actName         As Name
For Each actName In ActiveWorkbook.Names
If Left(actName.Name, Len(AKNumFormat)) = AKNumFormat Or _
InStr(1, actName.Name, "!" & AKNumFormat, vbTextCompare) > 0 Then
NumCenterRange actName.RefersToRange
End If
Next actName
End Sub
Private Sub NumCenterRange(Target As Range)
Dim testCell        As Range
Dim numRng          As Range
Dim numMax          As Double
Dim firstRow        As Long
Dim saveWidth       As Double
Dim maxWidth        As Double
Dim charWidth       As Double
On Error Resume Next
With Target.Worksheet
If Target.Address = .Range(.Cells(1, Target.Column), _
.Cells(.Rows.Count, Target.Column)).Address Then
firstRow = .Range(.Cells(1, Target.Column), .Cells(.UsedRange.Rows.Count, _
Target.Column)).SpecialCells(xlCellTypeConstants, xlNumbers).Row
Set numRng = .Range(.Cells(firstRow, Target.Column), .Cells(.UsedRange.Rows.Count, Target.Column))
Else
Set numRng = Target
End If
numMax = WorksheetFunction.Max(Target)
If Err.Number <> 0 Then
Exit Sub
End If
Application.ScreenUpdating = False
Application.StatusBar = "Bitte warten - Formatierung läuft"
Set testCell = .Cells(1, .Columns(.Columns.Count).End(xlToLeft).Column + 1)
saveWidth = testCell.ColumnWidth
testCell.Value = numMax
testCell.Columns.AutoFit
maxWidth = testCell.ColumnWidth
testCell.Value = AKFormatChar
testCell.Columns.AutoFit
charWidth = testCell.ColumnWidth
testCell.ColumnWidth = saveWidth
testCell.Value = ""
saveWidth = CInt((numRng.ColumnWidth - maxWidth) / charWidth)
maxWidth = InStr(1, numRng(1).NumberFormatLocal, """", vbTextCompare) - 1
If maxWidth < 1 Then
maxWidth = Len(numRng(1).NumberFormatLocal) + 1
End If
numRng.NumberFormatLocal = Left(numRng(1).NumberFormatLocal, maxWidth) & """" & String(saveWidth, AKFormatChar) & """"
numRng.HorizontalAlignment = xlHAlignRight
Application.ScreenUpdating = True
Application.StatusBar = ""
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige