Hallo Tylo
Replace() kann pro Anwendung nur auf eine Zelle angewendet werden. Wenn Du mehrere Zellen durchlaufen willst, musst Du eine Schleife verwenden. Du brauchst auch nicht den super ausführlichen Aufbau von Replace und Du kannst beide Ersetzungen einfach verschachteln. Zusätzlich muss das Ergebnis der Ersetzung aktiv in den Datentyp Double gecastet werden. Sonst überlässt Du Excel ds Interpretieren des Ergebnisses. Nie eine gute Idee.
Hier kannst Du nachsehen, was es mit dem Typecast auf sich hat:
https://learn.microsoft.com/de-de/office/vba/language/concepts/getting-started/type-conversion-functions
Hier ist ein funktionierendes Makro für Dein Anliegen:
Sub ReplaceAsNumber()
Dim ws As Worksheet 'Um mit With ... End With zu arbeiten
Dim currRow As Long 'Wird als aktuelle Zeile verwendet, um alle Zellen einer Spalte durchzugehen
Dim currCol 'Als aktuelle Spalte setzen, in der gearbeitet wird
Set ws = ActiveWorkbook.ActiveSheet 'Vorbereitung With ... End With
currCol = 11 'Spalte K
With ws
'Alle Zeilen der gesetzten Spalte durchgehen.
For currRow = 1 To .Cells(.Rows.Count, currCol).End(xlUp).Row
'Das m und den . ersetzen. Um eine Fließkommazahl zu erhalten, muss der entstehende
'String zum Datentyp Double konvertiert werden, sonst interpretiert Excel munter
'drauf los und bei 3, 6, 9 ... Stellen hinter dem Komma/ Punkt wird der entstehende
'Wert als Dezimalzahl interpretiert, wobei jede dritte Stelle durch den Dezimaltrenner
'markiert wird. Das geht alles in einer Zeile, wobei der resultierende Wert in die
'Zelle zurückgeschrieben wird.
.Cells(currRow, currCol) = CDbl(Replace(Replace(.Cells(currRow, currCol), "m", ""), ".", ","))
Next currRow
End With
End Sub
Viele Grüße,
Zwenn
|