Mit nachstehendem Code wandle ich die Einträge im Range "psBetrag" um, falls diese nur wie Zahlen aussehen, es sich jedoch um Texte handelt.
Diesen Code rufe ich auf, wenn ich eine bestimmte Tabelle verlasse (Worksheet_Deactivate). Nun wäre es elegant, wenn ich zuerst abfragen könnte, ob es solche Einträge überhaupt gibt, da sonst diese Umwandlung jedesmal läuft, auch wenn dies nicht mehr notwendig wäre.
Gibt es überhaupt eine Möglichkeit, dies abzufragen, ohne dass die Zellen (können gut und gerne 20'000 sein) einzeln durchlaufen werden müssen?
Danke für jeden Hinweis und Grüsse, Peter
Sub ArrayUmwandeln()
ThisWorkbook.Activate
'Texte, die wie Zahlen aussehen z.B. 1.111,19 werden in normale Zahlen umgewandelt und
'anschliessend formatiert - NULL-Werte werden unterdrückt
'Beispielformel =WENN(ISTZAHL(A7);A7;1*WECHSELN(WECHSELN(A7;".";"");",";"."))
Dim myArray, lngI As Long
Dim AWS As Object
Set AWS = Application.WorksheetFunction
myArray = Range("psBETRAG")
For lngI = 1 To UBound(myArray)
If AWS.IsNumber(myArray(lngI, 1)) Then
' 'Zahl bleibt unverändert
Else
' 'entweder mit Funktion Replace
myArray(lngI, 1) = 1 * Replace(Replace(myArray(lngI, 1), ".", ""), ",", ".")
' 'oder mit WorksheetFunction.Substitute
' 'myArray(lngI, 1) = 1 * AWS.Substitute(AWS.Substitute(myArray(lngI, 1), ".", ""), ",", ". _
")
End If
Next
Range("psBETRAG") = myArray
End Sub