Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Format einer Zelle ändern

Format einer Zelle ändern
30.07.2005 22:24:23
Alexander
Guten Tag,
ich möchte das Format einer Zelle unter einer bestimmten Bedingung ändern lassen. Dies ist mit der WENN-Funktion unter Excel nicht möglich. Auch die "Bedingte Formatierung" funktioniert nicht, da die Bedingung in einer anderen Zelle steht, als die zu formatierende Zelle.
Ich habe also ein Makro mit der Formatänderung aufgezeichnet. Um diesen Code aublaufen zu lassen brauche ich doch aber ein Ereignis, oder?! Z.B. CommandButton1_Click oder ähnlich. Als Ereignis:
Private Sub Range("A1") = "2"
funktioniert es nicht. Was mache ich falsch?
Vielen Dank im Vorraus
Alex
Anzeige

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Format einer Zelle ändern
30.07.2005 22:31:14
Hajo_Zi
Hallo Alex,
benutze bedingte Formatierung und Formel ist.
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.


Anzeige
AW: Format einer Zelle ändern
30.07.2005 22:36:30
Alexander
Wow,
sehe gerade. Da kann man einfach die Bedingung reinschreiben.
Vielen Dank nochmal.
Alex
anderes Format ändern!
30.07.2005 22:41:10
Alexander
Hallo,
unter bedingte Formatieren kann man nurn einen kleinen Teil verändern. Ich möchte aber die Einheit verändern. Also z.B. ob kg oder Euro.
Wie kann ich das einstellen?
Alex
Anzeige
AW: anderes Format ändern!
30.07.2005 22:45:28
Matthias
Hallo Alex,
das geht nun wieder über Formel:

=WENN(A1=1;TEXT(A1*10;"0 kilo");TEXT(A1*20;"0 €"))

Gruß Matthias
AW: anderes Format ändern!
30.07.2005 22:48:04
Alexander
Super,
das hilft mir weiter. Gibt es eine Übersicht für Formeln, die Formate ändern?
Danke
Alex
AW: anderes Format ändern!
30.07.2005 22:52:10
Matthias
Hallo Alex,
im Grunde ist das Zelformat damit gar nicht geändert (guck nach: es steht immer auf "Standard"). Es wird nur verschiedener Ausgabetext erzeugt.
Das Problem ist dabei auch, dass man mit dem Ergebnis nicht einfach weiterrechnen kann...
Gruß Matthias
Anzeige
AW: anderes Format ändern!
30.07.2005 23:03:46
Alexander
Hallo,
ich muss mit dem Ergebnis schon weiterrechnen.
Außerdem: Die Zelle, die die Formatierung ändert muss leer bleiben, da dort ein Wert per Hand eingetragen wird.
Ist dies möglich?
Nochmals Danke
Alex
AW: anderes Format ändern!
30.07.2005 23:03:53
Alexander
Hallo,
ich muss mit dem Ergebnis schon weiterrechnen.
Außerdem: Die Zelle, die die Formatierung ändert muss leer bleiben, da dort ein Wert per Hand eingetragen wird.
Ist dies möglich?
Nochmals Danke
Alex
Anzeige
AW: anderes Format ändern!
30.07.2005 23:08:26
Matthias
Hallo Alex,
wenn das so ist:
entweder, du nimmst zwei Zellen, eine für die Zahl, die andere für die Einheit, oder du wagst dich ein wenig an VBA ran.
[ ] ich bleib bei der einfachen Lösung
[ ] ok, zeig mir wie das mit VBA geht
Gruß Matthias
Wagen wir VBA!
30.07.2005 23:16:41
Alexander
Hallo Matthias,
den ersten Weg habe ich bereits versucht. Ist aber nicht zufriedenstellend.
Zu der 2. Sache: Ich habe eine leere Zelle als Vorlage formatiert. Ein Makro aufgezeichnet, in dem ich das Format übertrage. Ich brauche also einen Code, der die Befehle des Makros startet, sobald die Zahl einer anderen Zelle von 0 auf 1 sich ändert.
Vielen Dank
Alexander
Anzeige
AW: Wagen wir VBA!
30.07.2005 23:35:27
Matthias
Hallo Alex,
also gut.. :-)
Nun, in Excel gibt es viele Ereignisse, aus die man mit Codezeilen reagieren kann. z.B. auf das aktivieren/deaktivieren einer Mappe, eines Blattes, auch die Neuberechnung der Zellen oder auf Änderungen von Zellen per Hand.
Wir brauchen nun das Ereignis, das auf die manuelle Änderung von Zellen reagiert, denn du willst ja in eine bestimmte Zelle (im Beispiel) 1 oder 2 schreiben, und davon abhängig soll eine andere Zelle im Format geändert werden.
Dieses Ereignis ist dem Tabellenblatt zugeordet. (Wenn du auf alle Änderungen in allen Blättern der Mappe regieren wolltest, wäre es der Mappe (Modul "DieseArbeitsmappe") zugeordnet. Wenn du auf alle Blätter aller geöffnetn Mappen reagieren wolltest, müsstest du Nepumuk fragen wg. Klassenmodul, vergiss das gleich wieder;-) )
Zum Codemodul des Tabellenblattes kommt man am einfachsten, wenn man einen Rechtsklick auf den Tabellenblattnamen macht (Arbeitsblattregister, z.B. auf "Tabelle1") und im erscheinenden Kontextmenü "Code anzeigen" wählt.
Oben im erschienenen Codefenster sind 2 Comboboxen, links steht (Allgemein) und rechts (Deklarationen).
Ändere nun die Box links in "Worksheet": Schon wird ein Prozedurrumpf erzeugt für das Ereignis "SelectionChange". Das brauchen wir hier aber nicht. Also die Box rechts öffnen und "Change" auswählen. Nun steht da:

Private Sub Worksheet_Change(ByVal Target As Range)
End Sub

und alles, was du da an Code reinschreibst, wird ausgeführt, sobald auf dem Blatt eine manelle Änderung von Zellen durchgeführt wurde.
Die Prüfung, was geändert wurde, erfolgt über die Prüfung des Argumentes "Target".
mein Vorschlag nun für das Worksheet_Change()-Ereignis:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Select Case Target.Value
Case 1
Range("A2").NumberFormat = "# kilo"
Case 2
Range("A2").NumberFormat = "# €"
Case Else
Range("A2").NumberFormat = "General"
End Select
End If
End Sub

Die erste Zeile (If Intersect(...) fragt ab, ob die Schnittmenge aus dem geänderten Bereich und der Zelle A1 "nicht nichts", also etwas ist.
Man könnte auf abfragen

If Taget.Address = "$A$1" Then

aber dann fällt es durch die Prüfung, wenn du z.B. die ganze Spalte A auswählst und löschst oder mit Strg-Enter Eingaben für alle ausgewählten Zellen machst.
Den Rest schau mal durch und sag, ob es dir weiterhilt. Mein Schreibwahn ebbt nun nämlich langsam ab. ;-)
Gruß Matthias
Anzeige
AW: Wagen wir VBA!
30.07.2005 23:44:10
Alexander
Hallo nochmal,
vielen Dank für die schnelle und ausführliche Hilfe.
Was Du geschrieben hast leuchtet mir ein. Ich werde es morgen ausprobieren.
Wenn ich dann noch Probleme habe werden ich mich melden.
Vielen Dank und Gute Nacht.
Alex
Worksheet_Change()-Ereignis
31.07.2005 10:44:25
Alexander
Hallo zusammen,
der Code von Matthias:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Select Case Target.Value
Case 1
Range("A2").NumberFormat = "# kilo"
Case 2
Range("A2").NumberFormat = "# €"
Case Else
Range("A2").NumberFormat = "General"
End Select
End If
End Sub

funktioniert ausgezeichnet. Nur leider ändert sich der Inhalt der Zelle "A1" durch einen Sverweis. Damit reagiert der Code nicht. Was muss ich ändern?
Bitte helft mir. Danke
Alex
Anzeige
AW: Worksheet_Change()-Ereignis
31.07.2005 11:40:50
Josef
Hallo Alex!
Dann so!
Private Sub Worksheet_Calculate()
    Range("A2").NumberFormatLocal = IIf(Range("A1") = 1, "0,00 kg", "#.##0,00 €")
End Sub


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!


Anzeige
AW: Worksheet_Change()-Ereignis
31.07.2005 12:38:14
Alexander
Hallo,
habe es jetzt soweit geschafft. Letzte Frage:
Mit der Formatierung: "# €" "# kilo" funktioniert alles. Nur möchte ich es in Gramm also "# g" angeben. Das macht er aber nicht. Wiso nur?
(Fehlermeldung: Die Number-Eigenschaft des Range-Objektes kann nicht festgelegt werden)
Danke für die Hilfe
Alex
Anzeige
AW: Worksheet_Change()-Ereignis
31.07.2005 12:47:58
Josef
Hallo Alex!
Dasfunktioniert bei mir ohne Probleme!
Private Sub Worksheet_Calculate()
    Range("A2").NumberFormatLocal = IIf(Range("A1") = 1, "# g", "# €")
End Sub


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!


Anzeige
AW: Worksheet_Change()-Ereignis
31.07.2005 13:04:26
Alexander
Hallo,
bei mir funktioniert es nicht.
Habe eine Mappe hochgeladen. Sobald in "A1" eine "1" steht. kommt die Fehlermeldung.
https://www.herber.de/bbs/user/25157.xls
Danke
Alex
AW: Worksheet_Change()-Ereignis
31.07.2005 13:16:59
Josef
Hallo Alex!
Auch in deiner Mappe klappt's bei mir!
Probier mal so!
Private Sub Worksheet_Calculate()
    Range("A2").NumberFormat = IIf(Range("A1") = 1, "# ""g""", "# ""€""")
End Sub


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!


Anzeige
AW: Worksheet_Change()-Ereignis
31.07.2005 13:19:16
Alexander
Jetzt funktioniert es!!! Danke!
Weißt Du, warum es bei mir nicht ohne doppelte Anführungszeichen geht?
Alex
AW: anderes Format ändern!
30.07.2005 22:47:47
Josef
Hallo Alex!
Welche Bedingungen sollen zur Änderung der Formatierung herangezogen werden?
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!


Anzeige
AW: anderes Format ändern!
30.07.2005 22:49:52
Alexander
Hallo Sepp,
die Bedingung ist einfach: Der Inhalt einer bestimmten Zelle ist "1" oder "2".
Alex
AW: anderes Format ändern!
30.07.2005 23:34:13
Josef
Hallo Alex!
Die Zelle die das Format bestimmt ist "A1", in "B1" wird das Format geändert!
Rechtsklick auf Blattregister - Code anzeigen - in das rechte Fenster den Code kopieren!
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        [B1].NumberFormatLocal = IIf(Target = 1, "0,00 kg", "#.##0,00 €")
    End If
End Sub


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!


Anzeige
AW: anderes Format ändern!
30.07.2005 23:47:00
Alexander
Hallo Sepp,
vielen Dank für den Code. Ich werde das morgen früh ausprobieren.
Wenn ich noch Probleme habe, melde ich mich.
Danke nochmal für die schnelle Hilfe.
Alex
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Format einer Zelle ändern in Excel VBA


Schritt-für-Schritt-Anleitung

Um das Format einer Zelle in Excel VBA zu ändern, kannst Du folgenden Schritten folgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Wähle das gewünschte Arbeitsblatt: Klicke im Projektfenster auf das Arbeitsblatt, das du bearbeiten möchtest.

  3. Füge den Code ein: Kopiere den folgenden Code in das Codefenster des Arbeitsblattes:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("A1")) Is Nothing Then
           Select Case Target.Value
               Case 1
                   Range("A2").NumberFormat = "# kilo"
               Case 2
                   Range("A2").NumberFormat = "# €"
               Case Else
                   Range("A2").NumberFormat = "General"
           End Select
       End If
    End Sub
  4. Speichere Deine Änderungen und schließe den VBA-Editor.

  5. Teste den Code: Ändere den Wert in Zelle A1 auf 1 oder 2, um zu sehen, wie sich das Format in Zelle A2 ändert.


Häufige Fehler und Lösungen

  • Fehler: "Excel Format ändern funktioniert nicht"
    Stelle sicher, dass der Code im richtigen Arbeitsblattmodul eingefügt wurde. Der Code muss im Modul des spezifischen Arbeitsblattes stehen, nicht im allgemeinen Modul.

  • Fehler: "Die Number-Eigenschaft des Range-Objektes kann nicht festgelegt werden"
    Dieser Fehler tritt häufig auf, wenn das Format nicht korrekt angegeben wird. Überprüfe, ob Du das richtige Format (z.B. "# g" für Gramm) benutzt.

  • Problem mit Sverweis: Wenn A1 von einem Sverweis abhängt, verwende stattdessen das Worksheet_Calculate()-Ereignis, um auf Veränderungen zu reagieren.


Alternative Methoden

Wenn VBA nicht die beste Lösung für Dich ist, kannst Du auch die Bedingte Formatierung in Excel nutzen:

  1. Wähle die Zelle aus, die formatiert werden soll.
  2. Gehe zu Start > Bedingte Formatierung > Neue Regel.
  3. Wähle "Formel zur Ermittlung der zu formatierenden Zellen verwenden" und gib die Regel ein, z.B. =A1=1.
  4. Stelle das gewünschte Format ein.

Diese Methode ist einfacher, funktioniert jedoch nur, wenn die Bedingungen direkt in der Zelle stehen.


Praktische Beispiele

  • Beispiel 1: Wenn in Zelle A1 eine "1" steht, soll A2 als Kilogramm ("# kilo") formatiert werden.

  • Beispiel 2: Wenn A1 eine "2" enthält, wird A2 als Euro ("# €") formatiert.

Private Sub Worksheet_Calculate()
    Range("A2").NumberFormatLocal = IIf(Range("A1") = 1, "# g", "# €")
End Sub

Diese Beispiele zeigen, wie Du das vba zahlenformat ändern kannst.


Tipps für Profis

  • Nutze die Debugging-Funktion im VBA-Editor, um Fehler zu finden und den Code zu testen.
  • Achte darauf, dass das NumberFormat immer dem gewünschten Format entspricht. Bei Einheiten wie Gramm oder Euro ist es wichtig, die korrekten Formatbezeichnungen zu verwenden.
  • Verwende Application.EnableEvents = False, um zu verhindern, dass der Code in einer Endlosschleife läuft, wenn Du mehrere Zellen gleichzeitig änderst.

FAQ: Häufige Fragen

1. Wie kann ich das Standardzahlenformat ändern?
Du kannst das Standardformat mit Range("A1").NumberFormat = "0" festlegen, indem Du dies in das entsprechende Ereignis oder den Code einfügst.

2. Funktioniert das auch in Excel 365?
Ja, der beschriebene Code funktioniert in allen neueren Versionen von Excel, einschließlich Excel 365.

3. Kann ich mehrere Zellen gleichzeitig formatieren?
Ja, Du kannst dies tun, indem Du die Target-Range entsprechend anpasst und mehrere Zellen in Deinem Code ansprichst.

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