Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
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

Unterschiedliche Zahlen automatisch zentrieren

Unterschiedliche Zahlen automatisch zentrieren
25.09.2014 10:21:26
Carl
Hallo zusammen,
die folgende Situation ist gegeben:
Ich gebe in bestimmte Zellen (A4 - M4, A11 - M11, A18 - M18 und A25 - M25) entweder eine 1 oder ,5 ein. Die ,5 wir automatisch in 1/2 umgewandelt. Das soll auch so sein, da die Zellen im Format Bruch, Als Halbe formatiert sind.
Nun stellt sich aber das Problem, dass ich immer per Hand jede einzelne Zelle neu formatieren (Zentriert) muss, in der die Zahl von 1/2 auf 1 oder von 1 auf 1/2 geändert wird.
Gibt es dafür eine Lösung?

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unterschiedliche Zahlen automatisch zentrieren
25.09.2014 10:56:04
Klaus
Hallo Carl,
die Zellen sind und bleiben ja zentriert ... es sieht nur doof aus, weil bei Ganzzahlen der Bruch nicht angezeigt wird. Musst du jedesmal von Hand umstellen. Oder du kopierst dir diese Makros in die Codesektion deiner Tabelle (rechtsclick auf den Reiter, dann Code anzeigen, dann einfach in das weiße Feld reinkopieren). Dann ändert Excel bei jeder Eingabe das Zahlenformat automatisch.
Grüße,
Klaus M.vdT.

Public r As Range
Private Sub Worksheet_Change(ByVal Target As Range)
For Each r In Target
With r
.HorizontalAlignment = xlCenter
If (.Value - Int(.Value)) = 0 Then
.NumberFormat = "0"
Else
.NumberFormat = "# ?/?"
End If
End With
Next r
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
r = Target
End Sub

Anzeige
AW: Unterschiedliche Zahlen automatisch zentrieren
25.09.2014 13:07:04
Carl
Hallo Klaus,
danke für den Code, aber etwas mache ich wohl falsch. Denn wenn ich den eingefügten Code testen möchte (UserForm ausführen), dann erscheint erst das Feld wo ich einen Namen für das Makro vergeben muss. Aber auch danach funktioniert es nicht. "Ungültiges Attribut in Sub oder Function." Gelb markiert ist dann Sub Test().

AW: Unterschiedliche Zahlen automatisch zentrieren
25.09.2014 13:55:49
Klaus
Hallo Carl,
mein Code enthält weder eine Userform noch eine SUB TEST(). Lad mal deine Datei hoch, dann baue ich dir den Code ein.
Grüße,
Klaus M.vdT.

AW: Unterschiedliche Zahlen automatisch zentrieren
25.09.2014 15:19:57
Carl
Hallo Klaus,
klar, danke, hochladen kann ich die Datei, aber ich möchte die Sache ja selber verstehen. Sub Test(), das habe ich vergeben, denn man braucht doch einen Namen, da bei der Ausführung dieses Fenster kommt, in dem man ein Makro auswählen soll, aber es gibt ja noch keins. Ergo muss ich erst ein Makro erstellen, welches ich dann Sub Test nenne. Was ich nicht verstehe: Wieso gibt es bei Dir kein UserForm? So wie Du es geschrieben hast: (rechtsclick auf den Reiter, dann Code anzeigen, dann einfach in das weiße Feld reinkopieren), habe ich es gemacht. Zuerst ALT+F11, dann den Code eingegeben.

Anzeige
AW: Unterschiedliche Zahlen automatisch zentrieren
25.09.2014 15:41:11
Klaus
Hallo Carl,
ich kenne deine Datei nicht. Und ich habe auch niemals "ALT+F11" geschrieben. Wenn du mit rechts auf einen Reiter clickst und dann auf "Code anzeigen", bist du im VBA-Editor gleich im richtigem Feld - dem Code des Tabellenreiters. Warscheinlich hast du mit "ALT+F11" das letzte benutze Feld erwischt und das war eine Userform? Oder unter xl2003 war es anders, ich meine mich aber zu erinnern das es auch da so ging.
Ok, zum lernen. Erstmal:
Userbild
HIER ist der Code für Tabelle1. Das Makro soll in Tabelle1 laufen, so dass die Formatierungen in Tabelle1 gesetzt werden. Wenn es in deiner Datei Tabelle17 ist, dann natürlich den Code in Tabelle17 kopieren. Wenn diese Tabelle bei dir nicht Tabelle17 heisst sondern du sie ihn "MeineKatze" umbenannt hast, dann den Code natürlich in "MeineKatze" kopieren. Soweit.
Jetzt zum Code:
   Public r As Range
Private Sub Worksheet_Change(ByVal Target As Range)
For Each r In Target
With r
.HorizontalAlignment = xlCenter
If (.Value - Int(.Value)) = 0 Then
.NumberFormat = "0"
Else
.NumberFormat = "# ?/?"
End If
End With
Next r
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
r = Target
End Sub
Ganz oben steht:
Public r As Range
das gehört NICHT in ein Sub TEST(), sondern da oben hin! Grund: es ist "Public", da es für mehrere Makros zur Verfügung stehen soll. Daher der Name - Public.
Jetzt zum unteren Makro:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dieses Makro musst du NICHT selber starten, daher musst du es auch nicht Sub TEST() nennen. Es startet bei jedem "Selection Change" .. das heisst, immer wenn du die Zelle wechselst. Ob per Mausclick, Tabulator, Enter ... das Makro startet. Was macht es?
r = Target
es speichert in r - ein Range, also eine Zellenadresse, die aktuelle Zelle. Also die, in der du jetzt bist. "Target" ist, innerhalb dieses Makros, die neu ausgewählte Zelle.
Jetzt zum oberen Makro:
Private Sub Worksheet_Change(ByVal Target As Range)
dieses Makro startet auch von selbst. Und zwar immer, wenn du in einer Zelle etwas änderst. Was macht es? Schreibe ich der Einfachkeit halber zu jeder Zeile dazu:
For Each r In Target 'Für JEDE ausgewählte Zelle (99% ist das nur eine)
With r
.HorizontalAlignment = xlCenter
'Auswahl zentrieren. Die Auswahl müsste schon zentriert sein,
'aber es schadet nicht das nochmal sicherzustellen
If (.Value - Int(.Value)) = 0 Then 'prüfen, ob in der Zelle eine Kommazahl steht
.NumberFormat = "0" 'falls kein Komma vorkommt, die Zelle auf "normal Zahl" formatieren
Else
.NumberFormat = "# ?/?" 'falls ein Komma vorkommt, die Zelle auf "Zahl mit Bruch" formatieren
End If
End With
Next r

Der Effekt: Jedesmal wenn du eine Zelle änderst, wird automatisch die Zellformatierung deinen Wünschen angepasst.
Wenn du aufmerksam mitgelesen hast, fragst du jetzt. "Wozu der Umweg über r? Ich kann doch auf Change direkt Target referenzieren?". Antwort: target ist leider die Zelle in der du nach dem Enter landest. Das heisst, änderst du A1 und drückst ENTER, landest du warscheinlich in A2. Damit die Formatierung nicht auf A2 greift sondern auf die bearbeitete Zelle, merke ich mir vorher was die letzte(n) Zelle(n) waren.
So weit klar? Wenn nicht, fragen!
Tipp: Die "automatisch ausführen" Makros in den Tabellen erstellst du über die kleinen DropDown-Reiter oben im Bild, wenn du mal eigenen machen willst. Die namen sind selbssprechend: Wenn du ein "Worksheet_BeforeRightClick" Makro erstellst, wird das jedesmal ausgeführt wenn die rechte Maustaste gedrückt wird. So sparst du dir das manuelle starten der Makros!
Das ganze geht auch Datei-Weit oder sogar Excel-Weit, aber fürs erste soll die kleine Ausführung auf Tabellenebene zum experimentieren reichen.
Grüße,
Klaus M.vdT.

Anzeige
AW: Unterschiedliche Zahlen automatisch zentrieren
26.09.2014 14:36:05
Carl
Hallo Klaus,
danke, eine sehr ausführliche Erklärung. Da gab es wohl ein Missverständnis. Sicher, Du hast nicht geschrieben, dass ich ALT+F11 verwenden soll, aber ich muss ja ja irgendwie aus meiner Tabelle in den VBA-Editor kommen. Eingefügt ist der Code wohl richtig.
Übrigens: Ich drücke nach der Eingabe der Zahl nicht Enter, ich verwende den Cursor.
Und trotzdem funktioniert es immer noch nicht, es erscheint eine Fehlermeldung. Beim Debuggen ist dann r = Target markiert.
Userbild
Userbild

Anzeige
AW: Unterschiedliche Zahlen automatisch zentrieren
29.09.2014 08:01:04
Klaus
Hi,
das habe ich wohl ein "Set" vergessen. Seltsam, mein Testlauf hat funktioniert?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set r = Target
End Sub
Bitte nochmal versuchen :-)
Grüße,
Klaus M.vdT.

AW: Unterschiedliche Zahlen automatisch zentrieren
29.09.2014 16:03:17
Carl
Hallo Klaus,
stimmt, "Set" hat gefehlt. Jetzt funktioniert es. Vielen Dank.

Danke für die Rückmeldung! owT.
30.09.2014 07:46:49
Klaus
.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige