Excel - Text in Zahl per VBA

MickH74

Lieutenant
Registriert
Apr. 2009
Beiträge
591
Hallo liebes Forum,

ich versuche in Excel 2016 eine Spalte mit Werten (Jahreszahlen) per VBA in Zahlen umzuwandeln, die im Moment als Text angezeigt werden.
Leider funktioniert keine Methode, die ich im Internet gefunden habe.

Was ich schon probiert habe:
- Den Inhalt mit CInt(Zelle) auszulesen
- Den Zellwert mit Zelle = Zelle * 1 zu überschreiben
- Den Inhalt mit Zelle * 1 errechnen zu lassen
- Das Format der Zelle auf "Standard" zu setzen, egal ob über die Excel Menüs oder per VBA
- Das Format der Zelle auf "Number" zu setzen, egal ob über die Excel Menüs oder per VBA

Selbst wenn ich direkt in Excel die Zelle markiere und dann mit "Start/Löschen/Alle löschen" wähle oder wenn ich über die Zelleigenschaften die Zelle als Zahl definiere, lässt Excel die Zelle als Textfeld, zeigt mir aber weiterhin mit dem gelben Ausrufezeichen an, das eventuell ein Fehler vorliegt. Im Dropdown des Fehlerhinweises kann ich auch "In eine Zahl umwandeln" wählen und das ist die einzige Möglichkeit, die funktioniert.

Was mach ich da falsch?

Danke schon mal!
Mick
 
Zuletzt bearbeitet:
Ein Ausschnitt aus der Tabelle wäre interessant, jup.

Sind die Zellen als Text formatiert oder als Datum mit Filter "JJJJ"?

Weiter: Was kommt als Ergebnis, wenn du im Excel die WERT-Funktion benutzt?
 
Zuletzt bearbeitet:
Klar, gerne. Filter sind keine drin.

Screenshot siehe Anhang.
 

Anhänge

  • Excel.GIF
    Excel.GIF
    54,8 KB · Aufrufe: 580
Bei mir funktioniert die Kombination aus "*1" und Zahlenformat setzen:
Code:
Dim i
i = 2
Do While Cells(i, 7).Value <> ""
    Cells(i, 7).Value = Cells(i, 7).Value * 1
    Cells(i, 7).NumberFormat = "0"
    i = i + 1
Loop
 
So umständlich habe ich das jetzt gelöst, aber das muss doch auch einfacher gehen. Variable i durchläuft alle Zeilen in der Spalte.

Code:
.Cells(i, 7).Value = Left(.Cells(i, 7).Value, 4)
.Cells(i, 7).Value = RTrim(.Cells(i, 7).Value)
.Cells(i, 7).Value = .Cells(i, 7).Value * 1
.Cells(i, 7).NumberFormat = "General"

Gruß,
Mick
Ergänzung ()

@jumpin

Mit deinem Code schreibt er in alle Zellen eine Null.

Gruß,
Mick
 
Bei mir nicht, aber ich hab auch nur Zahl-Felder als Text-Feld umformatiert - Sicher, dass du in Zeile 5 nicht statt "NumberFormat" "Value" geschrieben hast? ;-)
Ansonsten wirds bei dir wohl Zeichen in den Zellen haben, die verhindern, dass die Zahl ohne Trim-Befehl umgewandelt werden kann.

Zu deinem Code: Funktioniert nur Trim(.Cells(i,7).Value) (statt left und dann rtrim) nicht?
 
Ja, hab ganz sicher "NumberFormat" verwendet.

Trim(.Cells(i,7).Value) funktioniert aber super! Da kann man sogar den ganzen Rest, also das *1 und das NumberFormat, weglassen.
Es scheint also irgendein Zeichen in der Zelle zu stehen, dass die Umwandlung verhindert. Wenn ich in der Bearbeitungszeile klicke, um den Zellwert zu bearbeiten und dann ohne etwas zu ändern, wieder in eine andere Zelle klicke, wird der Wert auch automatisch in eine Zahl verwandelt. Das ist schon echt seltsam.

Aber mit der einfachen Trim-Variante kann ich sehr gut leben. Toll! Danke!

Gruß,
Mick
 
Zurück
Oben