Tina's Feedback hat mich auf die Idee...
17.06.2009 18:02:44
Luc:-?
...gebracht, 2 udF zu entwickeln, die zum Einen (Zahlen-)Text in Zahlen und zum Anderen Zahlen _
in Zahlentext etwas "komfortabler" umwandeln als es die einschlägigen xlStandardfktt tun. Erstere folgt hier...
Rem mxfmlfäh Fkt konvert Zahl-als-Text in Zahl unter Berücksicht DezPkt u.%Zahl
' Vs1.1a - author:LSr - cd:20090614 - 1pub:20090617 Herber - lupd:20090615t
Function T2N(ByVal Bezug, Optional ByVal FErsatz)
Const orig As String = " @ d. do do. dito "
Dim i As Long, s As Long, z As Long, sz As Long, zz As Long, _
num As Boolean, pzt As Boolean, wfd As Boolean, aw, nw(), x As Variant
On Error Resume Next
wfd = IsArray(Bezug)
If wfd Then
aw = Bezug
If TypeName(Bezug) = "Range" Then
With Bezug
sz = .Columns.Count: zz = .Rows.Count
End With
ElseIf IsError(UBound(aw, 2)) Then
sz = UBound(aw) + 1 - LBound(aw): zz = 1
Else: sz = UBound(aw, 2) + 1 - LBound(aw, 2)
zz = UBound(aw, 1) + 1 - LBound(aw, 2)
End If
ReDim nw(zz - 1, sz - 1)
For Each x In aw: GoSub wf: i = i + 1: Next x
T2N = nw
Exit Function
Else: sz = 1: zz = 1: ReDim nw(0, 0): x = Bezug
End If
wf: num = IsNumeric(x)
If Not num Then
pzt = (Right(x, 1) = "%")
num = IsNumeric(Replace(Replace(x, ".", ","), "%", ""))
End If
If num Then
If pzt Then
nw(i Mod zz, i \ zz) = CDbl(Replace(Replace(x, ".", ","), "%", "")) / 100
Else: nw(i Mod zz, i \ zz) = CDbl(Replace(x, ".", ","))
End If
ElseIf IsMissing(FErsatz) Then
nw(i Mod zz, i \ zz) = CVErr(xlErrNum)
ElseIf CBool(InStr(orig, " " & LCase(FErsatz) & " ")) Then
nw(i Mod zz, i \ zz) = x
Else: nw(i Mod zz, i \ zz) = FErsatz
End If
If wfd Then Return
T2N = nw
End Function
Mit Arg2 kann der udFkt ein "Ersatz" für evtl auftretende Fehlerwerte "angeboten" wdn. Der Vgl der Wirkungsweise der o.g. udFktt mit der einschlägiger xlFktt kann der nachfolgd Abb entnommen wdn (EvalF ist eine weitere udFkt → aus AddIn FXsubset, die - wie hier verwendet - das Format ihres Arg1 übernimmt)...
Die udFkt nN kann man problemlos nachbauen. Sie hat nur 3 Codezeilen und 1 Argument x. Die "entscheidende" Zeile lautet so nN = -x... ;-)
Viel Spaß beim Ausprobieren!
Luc :-?
PS: Mit xl12 kann man schon was erleben. Die aufgeblähten Dateien sind (auch als ...xlsb) längst nicht so widerstandsfähig wie noch xl9-Dateien, obwohl die als Träger umfangreicher udF-Tests auch des Öfteren abgestürzt sind. Aber das im manuellen BModus WorsheetFunctions in udFktt bei Einzelberechnung per Klick Fehler produzieren, ist neu. Danke, Billy('s)Boys...