ZAHL IN TEXT
Moderator: Moderatoren
ZAHL IN TEXT
HALLO!
ICH SUCHE DIE MÖGLICHKEIT IN CALC, DIE IN EINER ZELLE STEHENDE ZAHL, IN EINER ANDEREN ZELLE ALS TEXT UMZUWANDELN. MIT DER FUNKTION BATHTEXT BEKOMME ICH IMMER NUR SELTSAME ZEICHEN ANGEZEIGT.
OPENOFFICE V.2.0.3 PORTABLE
ICH SUCHE DIE MÖGLICHKEIT IN CALC, DIE IN EINER ZELLE STEHENDE ZAHL, IN EINER ANDEREN ZELLE ALS TEXT UMZUWANDELN. MIT DER FUNKTION BATHTEXT BEKOMME ICH IMMER NUR SELTSAME ZEICHEN ANGEZEIGT.
OPENOFFICE V.2.0.3 PORTABLE
Hallo Ronni
Deine Feststelltaste (links neben dem A) hat sich anscheinend verklemmt, solltest du mal ölen, möchtest du Zahlen einfach nur als Text und nicht als Wert angezeigt bekommen ? -das erreichst du mit zb. dieser Formel: =TEXT(A1;"####,###").
Möchtest du aber bsplw. 123 als "hundertdreiundwanzig" ausgeben ? das geht am besten über Makrocode.
Gruß Karo
Deine Feststelltaste (links neben dem A) hat sich anscheinend verklemmt, solltest du mal ölen, möchtest du Zahlen einfach nur als Text und nicht als Wert angezeigt bekommen ? -das erreichst du mit zb. dieser Formel: =TEXT(A1;"####,###").
Möchtest du aber bsplw. 123 als "hundertdreiundwanzig" ausgeben ? das geht am besten über Makrocode.
Gruß Karo
Hallo Ronni
Folgende Makrofunktion gibt Zahlen als ausgeschriebene Ziffernfolge getrennt durch einen Bindestrich zurück:
Aufruf aus einer Zelle mit:
=SCHREIBZIFFERFOLGE(A1)
Gruß Karo
Folgende Makrofunktion gibt Zahlen als ausgeschriebene Ziffernfolge getrennt durch einen Bindestrich zurück:
Code: Alles auswählen
function SchreibZifferfolge(n)as string
dim schrZiffer
dim s as string
schrZiffer() = Array ("null","eins","zwei","drei","vier","fünf","sechs","sieben","acht","neun")
for i = 1 to len(n)
s = s & schrZiffer(mid(n,i,1)) & "-"
next
schreibzifferfolge = left(s,len(s)-1)
End function
=SCHREIBZIFFERFOLGE(A1)
Gruß Karo
Hallo Ronni
Geändert 24.5.07 Karo
Aufruf mit: =NUMBERTOTEXT(A1)
Gruß Karo
Gut, du hast es so gewollt, folgendes ist aus http://www.pitonyak.org/oo.php entnommen und halbwegs auf deutsche Schreibweise angepasst:Wie würde das mit deinem Beispiel 123 als "hundertdreiundwanzig" aussehen?
Code: Alles auswählen
Function NumberToText(ByVal n) As String
REM by Andrew D. Pitonyak
Dim sBigWordsUSA()
Dim sBigWordsUK()
Dim sBigWordsDE()
REM 10^100 is a googol (10 duotrigintillion)
REM This goes to 10^303, how big do you really want me to go?
sBigWordsUSA = Array( "", _
"thousand", "million", "billion", "trillion", "quadrillion", _
"quintillion", "sexillion", "septillion", _
"octillion", "nonillion", "decillion", "undecillion", "duodecillion", _
"tredecillion","quattuordecillion", "quindecillion", "sexdecillion", _
"septdecillion", "octodecillion", "novemdecillion", "vigintillion", _
"unvigintillion", "duovigintillion", "trevigintillion", _
"quattuorvigintillion", "quinvigintillion", "sexvigintillion", _
"septvigintillion", "octovigintillion", "novemvigintillion", _
"trigintillion", "untrigintillion", "duotrigintillion", _
"tretrigintillion", "quattuortrigintillion", "quintrigintillion", _
"sextrigintillion", "septtrigintillion", "octotrigintillion", _
"novemtrigintillion", "quadragintillion", "unquadragintillion", _
"duoquadragintillion", "trequadragintillion", "quattuorquadragintillion", _
"quinquadragintillion", "sexquadragintillion", "septquadragintillion", _
"octoquadragintillion", "novemquadragintillion", "quinquagintillion", _
"unquinquagintillion", "duoquinquagintillion", "trequinquagintillion", _
"quattuorquinquagintillion", "quinquinquagintillion", _
"sexquinquagintillion", "septquinquagintillion", "octoquinquagintillion", _
"novemquinquagintillion", "sexagintillion", "unsexagintillion", _
"duosexagintillion", "tresexagintillion", "quattuorsexagintillion", _
"quinsexagintillion", "sexsexagintillion", "septsexagintillion", _
"octosexagintillion", "novemsexagintillion", "septuagintillion", _
"unseptuagintillion", "duoseptuagintillion", "treseptuagintillion", _
"quattuorseptuagintillion", "quinseptuagintillion", "sexseptuagintillion", _
"septseptuagintillion", "octoseptuagintillion", "novemseptuagintillion", _
"octogintillion", "unoctogintillion", "duooctogintillion", _
"treoctogintillion", "quattuoroctogintillion", "quinoctogintillion", _
"sexoctogintillion", "septoctogintillion", "octooctogintillion", _
"novemoctogintillion", "nonagintillion", "unnonagintillion", _
"duononagintillion", "trenonagintillion", "quattuornonagintillion", _
"quinnonagintillion", "sexnonagintillion", "septnonagintillion", _
"octononagintillion", "novemnonagintillion", "centillion" _
)
sBigWordsUK() = Array( "", "thousand", _
"milliard", "billion", "billiard", "trillion", "trilliard", _
"quadrillion", "quadrilliard", "quintillion", "quintilliard", _
"sextillion", "sextilliard", "septillion", "septilliard", _
"octillion", "octilliard", "nonillion", "nonilliard", "decillion", _
"decilliard", "undecillion", "undecilliard", "dodecillion", _
"dodecilliard", "tredecillion", "tredecilliard", "quattuordecillion", _
"quattuordecilliard", "quindecillion", "quindecilliard", "sexdecillion", _
"sexdecilliard", "septendecillion", "septendecilliard", "octodecillion", _
"octodecilliard", "novemdecillion", "novemdecilliard", "vigintillion", _
"vigintilliard", "unvigintillion", "unvigintilliard", "duovigintillion", _
"duovigintilliard", "trevigintillion", "trevigintilliard", _
"quattuorvigintillion", "quattuorvigintilliard", "quinvigintillion", _
"quinvigintilliard", "sexvigintillion", "sexvigintilliard", _
"septenvigintillion", "septenvigintilliard", "octovigintillion", _
"octovigintilliard", "novemvigintillion", "novemvigintilliard", _
"trigintillion", "trigintilliard", "untrigintillion", _
"untrigintilliard", "duotrigintillion", "duotrigintilliard", _
"tretrigintillion", "tretrigintilliard", "quattuortrigintillion", _
"quattuortrigintilliard", "quintrigintillion", "quintrigintilliard", _
"sextrigintillion", "sextrigintilliard", "septentrigintillion", _
"septentrigintilliard", "octotrigintillion", "octotrigintilliard", _
"novemtrigintillion", "novemtrigintilliard", "quadragintillion", _
"quadragintilliard", "unquadragintillion", "unquadragintilliard", _
"duoquadragintillion", "duoquadragintilliard", "trequadragintillion", _
"trequadragintilliard", "quattuorquadragintillion", _
"quattuorquadragintilliard", "quinquadragintillion", _
"quinquadragintilliard", "sexquadragintillion", "sexquadragintilliard", _
"septenquadragintillion", "septenquadragintilliard", _
"octoquadragintillion", "octoquadragintilliard", _
"novemquadragintillion", "novemquadragintilliard", "quinquagintillion", _
"quinquagintilliard" _
)
sBigWordsDE() = Array( "", "Tausend","Million", _
"Milliarde", "Billion", "Billiarde", "Trillion", "Trilliarde", _
"Quadrillion", "Quadrilliarde", "Quintillion", "Quintilliarde", _
"Sextillion", "Sextilliarde", "Septillion", "Septilliarde", _
"Oktillion", "Oktilliarde", "Nonillion", "Nonilliarde", _
"Dezillion", "Dezilliarde", "Undezillion", "Undezilliarde", _
"Duodezillion", "Doudezilliarde", "Tredezillion", _
"Tredizilliarde", "Quattuordezillion", "Quattuordezilliarde", _
"Quindezillion", "Quindezilliarde", "Sexdezillion", _
"Sexdezilliarde", "Septendezillion", "Septendezilliarde", _
"Oktodezillion", "Oktodezilliarde", "Novemdezillion", _
"Novemdezilliarde", "Vigintillion", "Vigintilliarde", _
"Unvigintillion", "Unvigintilliarde", "Duovigintillion", _
"Duovigintilliarde", "Trevigintillion", "Trevigintilliarde", _
"Quattuorvigintillion", "Quattuorvigintilliarde", "Quinvigintillion", _
"Quinvigintilliarde", "Sexvigintillion", "Sexvigintilliarde", _
"Septenvigintillion", "Septenvigintilliarde", "Oktovigintillion", _
"Oktovigintilliarde", "Novemvigintillion", "Novemvigintilliarde", _
"Trigintillion", "Trigintilliarde", "Untrigintillion", _
"Untrigintilliarde", "Duotrigintillion", "Duotrigintilliarde", _
"Tretrigintillion", "Tretrigintilliarde", "Quattuortrigintillion", _
"Quattuortrigintilliarde", "Quintrigintillion", "Quintrigintilliarde", _
"Sextrigintillion", "Sextrigintilliarde", "Septentrigintillion", _
"Septentrigintilliarde", "Oktotrigintillion", "Oktotrigintilliarde", _
"Novemtrigintillion", "Novemtrigintilliarde", "Quadragintillion", _
"Quadragintilliarde", "Unquadragintillion", "Unquadragintilliarde", _
"Duoquadragintillion", "Duoquadragintilliarde", "Trequadragintillion", _
"Trequadragintilliarde", "Quattuorquadragintillion", _
"Quattuorquadragintilliarde", "Quinquadragintillion", _
"Quinquadragintilliarde", "Sexquadragintillion", _
"Sexquadragintilliarde", "Septenquadragintillion", _
"Septenquadragintilliarde", "Oktoquadragintillion", _
"Oktoquadragintilliarde", "Novemquadragintillion", _
"Novemquadragintilliarde", "Quinquagintillion", "Quinquagintilliarde" _
)
Dim i As Integer
Dim iInt As Integer
Dim s As String
Dim dInt As Double
REM Chop off the decimal portion.
dInt = Fix(n)
If (dInt < 1000) Then
NumberToText = SmallIntToText(CInt(dInt))
Exit Function
End If
REM i is the index into the sBigWords array
i = 0
s = ""
Do While dInt > 0
iInt = CInt(dInt - Fix(dInt / 1000) * 1000)
If iInt <> 0 Then
If Len(s) > 0 Then s = " " & s
s = SmallIntToText(iInt) & " " & sBigWordsDE(i) & s
End If
i = i + 1
dInt = Fix(dInt / 1000)
'Print "s = " & s & " dInt = " & dInt
Loop
NumberToText = s
End Function
Function SmallIntToText(ByVal n As Integer) As String
REM by Andrew D. Pitonyak
Dim sOneWords()
Dim sTenWords()
Dim s As String
If n > 999 Then
Print "Warning, n = " & n & " which is too large!"
Exit Function
End If
sOneWords() = Array ("", _
"eins", "zwei", "drei", "vier", "fünf", _
"sechs", "sieben", "acht", "neun", "zehn", _
"elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", _
"sechszehn", "siebzehn", "achtzehn", "neunzehn", "zwanzig")
sTenWords() = Array( "", "zehn", "zwanzig", "dreisig", "vierzig", _
"fünfzig", "sechzig", "siebzig", "achtzig", "neunzig")
s = ""
If n > 99 Then
hhh = sOneWords(Fix(n / 100)) & " hundert"
if Fix(n /100) = 1 then
hhh = "einhundert"
end if
n = n MOD 100
If n = 0 Then
SmallIntToText = hhh
Exit Function
End If
hhh = hhh & " "
End If
If (n <= 20) Then
SmallIntToText = hhh & sOneWords(n)
exit function
else
zz = sTenWords(Fix(n / 10))
n = n MOD 10
If n = 0 Then
SmallIntToText = hhh & zz
Exit Function
End If
zz = zz & " "
End If
SmallIntToText = hhh & sOneWords(n) & "und"& zz
End Function
Aufruf mit: =NUMBERTOTEXT(A1)
Gruß Karo
Zuletzt geändert von Karolus am Do, 24.05.2007 13:29, insgesamt 1-mal geändert.
Hallo ronni
=BATHTEXT() wandelt lateinische Buchstaben und arabische Zahlen in die Buchstaben und Zahlzeichen der Sprache "Bath" .
Die Funktion =TEXT(A1;"....") wandelt lediglich Zahlen-werte in die gleichen Ziffern aber ohne Wert(mit denen dann nicht mehr gerechnet werden kann).
Sie funktionieren, sie tun nur nicht daß was du von ihnen erwartest,Jetzt noch die Frage:
Warum funktionieren die Formelfunktionen =Bathtext oder =Text nicht?
=BATHTEXT() wandelt lateinische Buchstaben und arabische Zahlen in die Buchstaben und Zahlzeichen der Sprache "Bath" .
Die Funktion =TEXT(A1;"....") wandelt lediglich Zahlen-werte in die gleichen Ziffern aber ohne Wert(mit denen dann nicht mehr gerechnet werden kann).
Also ihr könnt mich schlagen aber ich hab noch nie in StarBasic programmiert. Ich hab die Funktion derart abgewandelt dass aus
1 -> Eins
30->Dreißig
56 ->Sechundfünzig
1002 ->Eintausendzwei
wird.
Aufgerufen wird mit '=InWorten(A1)'
Vielleicht gehts sauberer aber scheint zu laufen.
1 -> Eins
30->Dreißig
56 ->Sechundfünzig
1002 ->Eintausendzwei
wird.
Aufgerufen wird mit '=InWorten(A1)'
Vielleicht gehts sauberer aber scheint zu laufen.
Code: Alles auswählen
Function InWorten(ByVal n) As String
REM by Andrew D. Pitonyak
Dim sBigWordsDE()
REM 10^100 is a googol (10 duotrigintillion)
REM This goes to 10^303, how big do you really want me to go?
sBigWordsDE() = Array( "", "tausend","million", _
"milliarde", "billion", "billiarde", "trillion", "Trilliarde", _
"Quadrillion", "Quadrilliarde", "Quintillion", "Quintilliarde", _
"Sextillion", "Sextilliarde", "Septillion", "Septilliarde", _
"Oktillion", "Oktilliarde", "Nonillion", "Nonilliarde", _
"Dezillion", "Dezilliarde", "Undezillion", "Undezilliarde", _
"Duodezillion", "Doudezilliarde", "Tredezillion", _
"Tredizilliarde", "Quattuordezillion", "Quattuordezilliarde", _
"Quindezillion", "Quindezilliarde", "Sexdezillion", _
"Sexdezilliarde", "Septendezillion", "Septendezilliarde", _
"Oktodezillion", "Oktodezilliarde", "Novemdezillion", _
"Novemdezilliarde", "Vigintillion", "Vigintilliarde", _
"Unvigintillion", "Unvigintilliarde", "Duovigintillion", _
"Duovigintilliarde", "Trevigintillion", "Trevigintilliarde", _
"Quattuorvigintillion", "Quattuorvigintilliarde", "Quinvigintillion", _
"Quinvigintilliarde", "Sexvigintillion", "Sexvigintilliarde", _
"Septenvigintillion", "Septenvigintilliarde", "Oktovigintillion", _
"Oktovigintilliarde", "Novemvigintillion", "Novemvigintilliarde", _
"Trigintillion", "Trigintilliarde", "Untrigintillion", _
"Untrigintilliarde", "Duotrigintillion", "Duotrigintilliarde", _
"Tretrigintillion", "Tretrigintilliarde", "Quattuortrigintillion", _
"Quattuortrigintilliarde", "Quintrigintillion", "Quintrigintilliarde", _
"Sextrigintillion", "Sextrigintilliarde", "Septentrigintillion", _
"Septentrigintilliarde", "Oktotrigintillion", "Oktotrigintilliarde", _
"Novemtrigintillion", "Novemtrigintilliarde", "Quadragintillion", _
"Quadragintilliarde", "Unquadragintillion", "Unquadragintilliarde", _
"Duoquadragintillion", "Duoquadragintilliarde", "Trequadragintillion", _
"Trequadragintilliarde", "Quattuorquadragintillion", _
"Quattuorquadragintilliarde", "Quinquadragintillion", _
"Quinquadragintilliarde", "Sexquadragintillion", _
"Sexquadragintilliarde", "Septenquadragintillion", _
"Septenquadragintilliarde", "Oktoquadragintillion", _
"Oktoquadragintilliarde", "Novemquadragintillion", _
"Novemquadragintilliarde", "Quinquagintillion", "Quinquagintilliarde" _
)
Dim i As Integer
Dim iInt As Integer
Dim s As String
Dim dInt As Double
Dim textklein As String
Dim ersterbuchstabe As String
REM Chop off the decimal portion.
dInt = Fix(n)
If (dInt < 1000) Then
textklein = SmallIntToText(CInt(dInt))
ersterbuchstabe = Ucase(Left(textklein,1)
InWorten = ersterbuchstabe & Right(textklein,Len(textklein)-1)
Exit Function
End If
REM i is the index into the sBigWords array
i = 0
s = ""
Do While dInt > 0
iInt = CInt(dInt - Fix(dInt / 1000) * 1000)
If iInt <> 0 Then
REM If Len(s) > 0 Then s = " " & s
s = SmallIntToText(iInt) & "" & sBigWordsDE(i) & s
End If
i = i + 1
dInt = Fix(dInt / 1000)
'Print "s = " & s & " dInt = " & dInt
Loop
REM If Right(Str(n),1) = "1" Then s = s & "s"
textklein = s
ersterbuchstabe = Ucase(Left(textklein,1)
InWorten = ersterbuchstabe & Right(textklein,Len(textklein)-1)
End Function
Function SmallIntToText(ByVal n As Integer) As String
REM by Andrew D. Pitonyak
Dim sOneWords()
Dim sTenWords()
Dim s As String
Dim eins As String
If n > 999 Then
Print "Achtung, n = " & n & " was zu gross ist!"
Exit Function
End If
sOneWords() = Array ("", _
"ein", "zwei", "drei", "vier", "fünf", _
"sechs", "sieben", "acht", "neun", "zehn", _
"elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", _
"sechszehn", "siebzehn", "achtzehn", "neunzehn", "zwanzig")
sTenWords() = Array( "", "zehn", "zwanzig", "dreißig", "vierzig", _
"fünfzig", "sechzig", "siebzig", "achtzig", "neunzig")
eins = "j"
s = ""
If n > 99 Then
hhh = sOneWords(Fix(n / 100)) & "hundert"
n = n MOD 100
If n = 0 Then
SmallIntToText = hhh
Exit Function
End If
End If
If (n > 20) Then
eins = "n"
zz = sTenWords(Fix(n / 10))
If Right(Str(n),1) <> "0" Then zz = "und" & zz
n = n MOD 10
If n = 0 Then
If Right(Str(zz),2) = "01" Then zz = zz & "s"
SmallIntToText = hhh & zz
Exit Function
End If
End If
If n = 1 Then
If eins = "j" Then zz = zz & "s"
End If
SmallIntToText = hhh & sOneWords(n) & zz
End Function
Hier nochmal mit Abfangen von leeren Einträgen:
Code: Alles auswählen
Function InWorten(ByVal n) As String
REM by Andrew D. Pitonyak
Dim sBigWordsDE()
REM 10^100 is a googol (10 duotrigintillion)
REM This goes to 10^303, how big do you really want me to go?
sBigWordsDE() = Array( "", "tausend","million", _
"milliarde", "billion", "billiarde", "trillion", "Trilliarde", _
"Quadrillion", "Quadrilliarde", "Quintillion", "Quintilliarde", _
"Sextillion", "Sextilliarde", "Septillion", "Septilliarde", _
"Oktillion", "Oktilliarde", "Nonillion", "Nonilliarde", _
"Dezillion", "Dezilliarde", "Undezillion", "Undezilliarde", _
"Duodezillion", "Doudezilliarde", "Tredezillion", _
"Tredizilliarde", "Quattuordezillion", "Quattuordezilliarde", _
"Quindezillion", "Quindezilliarde", "Sexdezillion", _
"Sexdezilliarde", "Septendezillion", "Septendezilliarde", _
"Oktodezillion", "Oktodezilliarde", "Novemdezillion", _
"Novemdezilliarde", "Vigintillion", "Vigintilliarde", _
"Unvigintillion", "Unvigintilliarde", "Duovigintillion", _
"Duovigintilliarde", "Trevigintillion", "Trevigintilliarde", _
"Quattuorvigintillion", "Quattuorvigintilliarde", "Quinvigintillion", _
"Quinvigintilliarde", "Sexvigintillion", "Sexvigintilliarde", _
"Septenvigintillion", "Septenvigintilliarde", "Oktovigintillion", _
"Oktovigintilliarde", "Novemvigintillion", "Novemvigintilliarde", _
"Trigintillion", "Trigintilliarde", "Untrigintillion", _
"Untrigintilliarde", "Duotrigintillion", "Duotrigintilliarde", _
"Tretrigintillion", "Tretrigintilliarde", "Quattuortrigintillion", _
"Quattuortrigintilliarde", "Quintrigintillion", "Quintrigintilliarde", _
"Sextrigintillion", "Sextrigintilliarde", "Septentrigintillion", _
"Septentrigintilliarde", "Oktotrigintillion", "Oktotrigintilliarde", _
"Novemtrigintillion", "Novemtrigintilliarde", "Quadragintillion", _
"Quadragintilliarde", "Unquadragintillion", "Unquadragintilliarde", _
"Duoquadragintillion", "Duoquadragintilliarde", "Trequadragintillion", _
"Trequadragintilliarde", "Quattuorquadragintillion", _
"Quattuorquadragintilliarde", "Quinquadragintillion", _
"Quinquadragintilliarde", "Sexquadragintillion", _
"Sexquadragintilliarde", "Septenquadragintillion", _
"Septenquadragintilliarde", "Oktoquadragintillion", _
"Oktoquadragintilliarde", "Novemquadragintillion", _
"Novemquadragintilliarde", "Quinquagintillion", "Quinquagintilliarde" _
)
Dim i As Integer
Dim iInt As Integer
Dim s As String
Dim dInt As Double
Dim textklein As String
Dim ersterbuchstabe As String
If n = 0 Then
InWorten = ""
Exit Function
End If
REM Chop off the decimal portion.
dInt = Fix(n)
If (dInt < 1000) Then
textklein = SmallIntToText(CInt(dInt))
ersterbuchstabe = Ucase(Left(textklein,1)
InWorten = ersterbuchstabe & Right(textklein,Len(textklein)-1)
Exit Function
End If
REM i is the index into the sBigWords array
i = 0
s = ""
Do While dInt > 0
iInt = CInt(dInt - Fix(dInt / 1000) * 1000)
If iInt <> 0 Then
REM If Len(s) > 0 Then s = " " & s
s = SmallIntToText(iInt) & "" & sBigWordsDE(i) & s
End If
i = i + 1
dInt = Fix(dInt / 1000)
'Print "s = " & s & " dInt = " & dInt
Loop
REM If Right(Str(n),1) = "1" Then s = s & "s"
textklein = s
ersterbuchstabe = Ucase(Left(textklein,1)
InWorten = ersterbuchstabe & Right(textklein,Len(textklein)-1)
End Function
Function SmallIntToText(ByVal n As Integer) As String
REM by Andrew D. Pitonyak
Dim sOneWords()
Dim sTenWords()
Dim s As String
Dim eins As String
If n > 999 Then
Print "Achtung, n = " & n & " was zu gross ist!"
Exit Function
End If
sOneWords() = Array ("", _
"ein", "zwei", "drei", "vier", "fünf", _
"sechs", "sieben", "acht", "neun", "zehn", _
"elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", _
"sechszehn", "siebzehn", "achtzehn", "neunzehn", "zwanzig")
sTenWords() = Array( "", "zehn", "zwanzig", "dreißig", "vierzig", _
"fünfzig", "sechzig", "siebzig", "achtzig", "neunzig")
eins = "j"
s = ""
If n > 99 Then
hhh = sOneWords(Fix(n / 100)) & "hundert"
n = n MOD 100
If n = 0 Then
SmallIntToText = hhh
Exit Function
End If
End If
If (n > 20) Then
eins = "n"
zz = sTenWords(Fix(n / 10))
If Right(Str(n),1) <> "0" Then zz = "und" & zz
n = n MOD 10
If n = 0 Then
If Right(Str(zz),2) = "01" Then zz = zz & "s"
SmallIntToText = hhh & zz
Exit Function
End If
End If
If n = 1 Then
If eins = "j" Then zz = zz & "s"
End If
SmallIntToText = hhh & sOneWords(n) & zz
End Function
Es wird jetzt folgendermaßen generiert, ich hoffe mal dass man das so schreiben kann:
1 -> Ein
1001 -> Eintausendein
1 -> Ein
1001 -> Eintausendein
Code: Alles auswählen
Function InWorten(ByVal n) As String
REM by Andrew D. Pitonyak
Dim sBigWordsDE()
REM 10^100 is a googol (10 duotrigintillion)
REM This goes to 10^303, how big do you really want me to go?
sBigWordsDE() = Array( "", "tausend","million", _
"milliarde", "billion", "billiarde", "trillion", "Trilliarde", _
"Quadrillion", "Quadrilliarde", "Quintillion", "Quintilliarde", _
"Sextillion", "Sextilliarde", "Septillion", "Septilliarde", _
"Oktillion", "Oktilliarde", "Nonillion", "Nonilliarde", _
"Dezillion", "Dezilliarde", "Undezillion", "Undezilliarde", _
"Duodezillion", "Doudezilliarde", "Tredezillion", _
"Tredizilliarde", "Quattuordezillion", "Quattuordezilliarde", _
"Quindezillion", "Quindezilliarde", "Sexdezillion", _
"Sexdezilliarde", "Septendezillion", "Septendezilliarde", _
"Oktodezillion", "Oktodezilliarde", "Novemdezillion", _
"Novemdezilliarde", "Vigintillion", "Vigintilliarde", _
"Unvigintillion", "Unvigintilliarde", "Duovigintillion", _
"Duovigintilliarde", "Trevigintillion", "Trevigintilliarde", _
"Quattuorvigintillion", "Quattuorvigintilliarde", "Quinvigintillion", _
"Quinvigintilliarde", "Sexvigintillion", "Sexvigintilliarde", _
"Septenvigintillion", "Septenvigintilliarde", "Oktovigintillion", _
"Oktovigintilliarde", "Novemvigintillion", "Novemvigintilliarde", _
"Trigintillion", "Trigintilliarde", "Untrigintillion", _
"Untrigintilliarde", "Duotrigintillion", "Duotrigintilliarde", _
"Tretrigintillion", "Tretrigintilliarde", "Quattuortrigintillion", _
"Quattuortrigintilliarde", "Quintrigintillion", "Quintrigintilliarde", _
"Sextrigintillion", "Sextrigintilliarde", "Septentrigintillion", _
"Septentrigintilliarde", "Oktotrigintillion", "Oktotrigintilliarde", _
"Novemtrigintillion", "Novemtrigintilliarde", "Quadragintillion", _
"Quadragintilliarde", "Unquadragintillion", "Unquadragintilliarde", _
"Duoquadragintillion", "Duoquadragintilliarde", "Trequadragintillion", _
"Trequadragintilliarde", "Quattuorquadragintillion", _
"Quattuorquadragintilliarde", "Quinquadragintillion", _
"Quinquadragintilliarde", "Sexquadragintillion", _
"Sexquadragintilliarde", "Septenquadragintillion", _
"Septenquadragintilliarde", "Oktoquadragintillion", _
"Oktoquadragintilliarde", "Novemquadragintillion", _
"Novemquadragintilliarde", "Quinquagintillion", "Quinquagintilliarde" _
)
Dim i As Integer
Dim iInt As Integer
Dim s As String
Dim dInt As Double
Dim textklein As String
Dim ersterbuchstabe As String
If n = 0 Then
InWorten = ""
Exit Function
End If
REM Chop off the decimal portion.
dInt = Fix(n)
If (dInt < 1000) Then
textklein = SmallIntToText(CInt(dInt))
ersterbuchstabe = Ucase(Left(textklein,1)
InWorten = ersterbuchstabe & Right(textklein,Len(textklein)-1)
Exit Function
End If
REM i is the index into the sBigWords array
i = 0
s = ""
Do While dInt > 0
iInt = CInt(dInt - Fix(dInt / 1000) * 1000)
If iInt <> 0 Then
REM If Len(s) > 0 Then s = " " & s
s = SmallIntToText(iInt) & sBigWordsDE(i) & s
End If
i = i + 1
dInt = Fix(dInt / 1000)
'Print "s = " & s & " dInt = " & dInt
Loop
REM If Right(Str(n),1) = "1" Then s = s & "s"
textklein = s
ersterbuchstabe = Ucase(Left(textklein,1)
InWorten = ersterbuchstabe & Right(textklein,Len(textklein)-1)
End Function
Function SmallIntToText(ByVal n As Integer) As String
REM by Andrew D. Pitonyak
Dim sOneWords()
Dim sTenWords()
Dim s As String
Dim eins As String
If n > 999 Then
Print "Achtung, n = " & n & " was zu gross ist!"
Exit Function
End If
sOneWords() = Array ("", _
"ein", "zwei", "drei", "vier", "fünf", _
"sechs", "sieben", "acht", "neun", "zehn", _
"elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", _
"sechszehn", "siebzehn", "achtzehn", "neunzehn", "zwanzig")
sTenWords() = Array( "", "zehn", "zwanzig", "dreißig", "vierzig", _
"fünfzig", "sechzig", "siebzig", "achtzig", "neunzig")
eins = "j"
s = ""
If n > 99 Then
hhh = sOneWords(Fix(n / 100)) & "hundert"
n = n MOD 100
If n = 0 Then
SmallIntToText = hhh
Exit Function
End If
End If
If (n > 20) Then
eins = "n"
zz = sTenWords(Fix(n / 10))
If Right(Str(n),1) <> "0" Then zz = "und" & zz
n = n MOD 10
If n = 0 Then
If Right(Str(zz),2) = "01" Then zz = zz & "s"
SmallIntToText = hhh & zz
Exit Function
End If
End If
REM If n = 1 Then
REM If eins = "j" Then zz = zz & "s"
REM End If
SmallIntToText = hhh & sOneWords(n) & zz
End Function