Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Unterschiedliche Zahlen automatisch zentrieren

Betrifft: Unterschiedliche Zahlen automatisch zentrieren von: Carl
Geschrieben am: 25.09.2014 10:21:26

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?

  

Betrifft: AW: Unterschiedliche Zahlen automatisch zentrieren von: Klaus M.vdT.
Geschrieben am: 25.09.2014 10:56:04

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



  

Betrifft: AW: Unterschiedliche Zahlen automatisch zentrieren von: Carl
Geschrieben am: 25.09.2014 13:07:04

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().


  

Betrifft: AW: Unterschiedliche Zahlen automatisch zentrieren von: Klaus M.vdT.
Geschrieben am: 25.09.2014 13:55:49

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.


  

Betrifft: AW: Unterschiedliche Zahlen automatisch zentrieren von: Carl
Geschrieben am: 25.09.2014 15:19:57

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.


  

Betrifft: AW: Unterschiedliche Zahlen automatisch zentrieren von: Klaus M.vdT.
Geschrieben am: 25.09.2014 15:41:11

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:

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.


  

Betrifft: AW: Unterschiedliche Zahlen automatisch zentrieren von: Carl
Geschrieben am: 26.09.2014 14:36:05

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.






  

Betrifft: AW: Unterschiedliche Zahlen automatisch zentrieren von: Klaus M.vdT.
Geschrieben am: 29.09.2014 08:01:04

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.


  

Betrifft: AW: Unterschiedliche Zahlen automatisch zentrieren von: Carl
Geschrieben am: 29.09.2014 16:03:17

Hallo Klaus,

stimmt, "Set" hat gefehlt. Jetzt funktioniert es. Vielen Dank.


  

Betrifft: Danke für die Rückmeldung! owT. von: Klaus M.vdT.
Geschrieben am: 30.09.2014 07:46:49

.


 

Beiträge aus den Excel-Beispielen zum Thema "Unterschiedliche Zahlen automatisch zentrieren"