Um beliebig große Zahlen, die als Strings gespeichert sind, zu addieren, müsste man die Addition von Hand durchführen, beispielsweise so:
Public Function ZahlenAddieren(Zahl1 As String, Zahl2 As String)
Dim Zahl1Add As String
Dim Zahl2Add As String
Dim Zahl3Add As String
Dim Übertrag As Boolean
Dim PunktStelle1 As Double
Dim PunktStelle2 As Double
Dim Zahl1PunktstelleVonLinks As Long, Zahl2PunktstelleVonLinks As Long
Dim Zahl1VormKomma As String, Zahl2VormKomma As String
Dim Zahl1NachmKomma As String, Zahl2NachmKomma As String
Dim PunktstelleVonLinks As Long
Dim GesLänge As Long, dere As Long
Dim Ergebnis1Stelle As Long
'Vorbereitung
Zahl1Add = Zahl1
Zahl2Add = Zahl2
If InStr(1, Zahl1Add, ",") = 0 Then Zahl1Add = Zahl1Add & ","
If InStr(1, Zahl2Add, ",") = 0 Then Zahl2Add = Zahl2Add & ","
Zahl1PunktstelleVonLinks = InStr(1, Zahl1Add, ",")
Zahl1VormKomma = Mid$(Zahl1Add, 1, InStr(1, Zahl1Add, ",") - 1)
Zahl1NachmKomma = Mid$(Zahl1Add, InStr(1, Zahl1Add, ",") + 1, Len(Zahl1Add))
Zahl2PunktstelleVonLinks = InStr(1, Zahl2Add, ",")
Zahl2VormKomma = Mid$(Zahl2Add, 1, InStr(1, Zahl2Add, ",") - 1)
Zahl2NachmKomma = Mid$(Zahl2Add, InStr(1, Zahl2Add, ",") + 1, Len(Zahl2Add))
If Len(Zahl1VormKomma) < Len(Zahl2VormKomma) Then
Zahl1VormKomma = String(Len(Zahl2VormKomma) - Len(Zahl1VormKomma), "0") & _
Zahl1VormKomma
ElseIf Len(Zahl1VormKomma) > Len(Zahl2VormKomma) Then
Zahl2VormKomma = String(Len(Zahl1VormKomma) - Len(Zahl2VormKomma), "0") & _
Zahl2VormKomma
End If
If Len(Zahl1NachmKomma) < Len(Zahl2NachmKomma) Then
Zahl1NachmKomma = Zahl1NachmKomma & String(Len(Zahl2NachmKomma) - Len( _
Zahl1NachmKomma), "0")
ElseIf Len(Zahl1NachmKomma) > Len(Zahl2NachmKomma) Then
Zahl2NachmKomma = Zahl2NachmKomma & String(Len(Zahl1NachmKomma) - Len( _
Zahl2NachmKomma), "0")
End If
Zahl1VormKomma = "0" & Zahl1VormKomma
Zahl2VormKomma = "0" & Zahl2VormKomma
'End If
PunktstelleVonLinks = Len(Zahl1VormKomma)
'PunktstelleVonLinks = Len(Zahl2VormKomma)
Zahl1Add = Zahl1VormKomma & Zahl1NachmKomma
Zahl2Add = Zahl2VormKomma & Zahl2NachmKomma
Übertrag = False
Zahl3Add = ""
'msg
'If Not Len(Zahl1Add) = Len(Zahl2Add) Then MsgBox "Fehler"
GesLänge = Len(Zahl2Add)
'Addieren
For dere = GesLänge To 1 Step -1
Ergebnis1Stelle = Val(Mid$(Zahl1Add, dere, 1)) + Val(Mid$(Zahl2Add, dere, _
1))
If Übertrag Then
Ergebnis1Stelle = Ergebnis1Stelle + 1
Übertrag = False
End If
If Ergebnis1Stelle > 9 Then
Übertrag = True
Ergebnis1Stelle = Ergebnis1Stelle - 10
End If
Zahl3Add = Ergebnis1Stelle & Zahl3Add
Next
Zahl3Add = Mid$(Zahl3Add, 1, PunktstelleVonLinks) & "," & Mid$(Zahl3Add, _
PunktstelleVonLinks + 1, Len(Zahl3Add))
For dere = 1 To PunktstelleVonLinks
If Mid$(Zahl3Add, 1, 1) = "0" Then
Zahl3Add = Mid$(Zahl3Add, 2, Len(Zahl3Add))
Else
dere = Len(Zahl3Add) + 200
End If
Next
For dere = Len(Zahl3Add) To 1 Step -1
If Mid$(Zahl3Add, dere, 1) = "0" Then
Zahl3Add = Mid$(Zahl3Add, 1, Len(Zahl3Add) - 1)
Else
dere = -200
End If
Next
If InStr(1, Zahl3Add, ",") = Len(Zahl3Add) Then Zahl3Add = Mid$(Zahl3Add, 1, _
Len(Zahl3Add) - 1)
ZahlenAddieren = Zahl3Add
End Function MfG, Preißer |