Ich hätte das wie folgt gemacht, ...
02.03.2016 21:13:23
Luc:-?
…Folks,
wenn ich solch eine unnötig spezielle UDF hätte schreiben wollen:
Function rechL(s As Variant) As Variant
If Len(s) > 2 And IsNumeric(s) Then
rechL = -Evaluate(Replace(Replace(s, " ", "+"), ",", "."))
Else: rechL = s
End If
End Function
Ich würde aber die bereits im Archiv vorhandene UDF TxEval vorziehen, weil man so etwas öfter (ge-)brauchen kann. Dann ist allerdings eine etwas längere Fml erforderlich. Hier mal beide UDFs im Vgl (die obige rechL, bei Original & Korrektur sähe das anders aus, denn Michaels Variante lässt eben nicht Texte stehen, sondern ersetzt sie durch LeerText):
| | A | B | C |
|---|
| 1 | Daten | rechL | TxEval |
|---|
| 2 | krank | krank | krank |
|---|
| 3 | 2 5 | -7 | -7 |
|---|
| 4 | xx | xx | xx |
|---|
| 5 | 2 | 2 | -2 |
|---|
| 6 | 3,3 | -3,3 | -3,3 |
|---|
| 7 | Urlaub | Urlaub | Urlaub |
|---|
| 8 | 3 6,4 1 | -10,4 | -10,4 |
|---|
| 9 | alfa | alfa | alfa |
|---|
| 10 | 5 7 2 6 | -20 | -20 |
|---|
| 11 | -44 | 44 | 44 |
|---|
| 12 | B2[:B11]:=rechL(A2) |
|---|
| 13 | C2[:C11]:=WENNFEHLER(-TxEval(WECHSELN(WECHSELN(A2;",";".";1);" ";"+"));A2) |
|---|
Man könnte die Teile der Fml ja auch um den jeweiligen OriginalText herumlegen. Dann bliebe der zwar ebenfalls erhalten, würde von den anderen rechL-Versionen* aber nicht ausgegeben und damit auch nicht angezeigt.
Hinweis bzgl IsNumeric: Jeder Text gilt VBA als numerisch, wenn er nur aus Zahlen, Leerzeichen, max 2 Plus- bzw MinusZeichen u/o bestimmten Buchstaben (A,D,E,P) an richtiger Position besteht (Dezimal- und TsderTrenner ebenfalls, in Kombi und letztere mehrfach nur lokale).
* Len(s) > 2 habe ich drin gelassen, ist aber ggf problematisch, wie man im obigen Vgl sehen kann.
Feedback erwünscht! Gruß, Luc :-?
Besser informiert mit …