Seite 1 von 1
Zahlen in Buchstaben konvertieren
Verfasst: Mo, 28.03.2005 19:39
von MarkusK
Hallo Leute,
bitte - könntet ihr mir mal helfen? Ich habe hier eine recht umfangreiche Tabelle und muss eine Zeile mit Zahlen in Buchstaben konvertieren. Dabei soll er die Zahl ausschreiben.
Beispiel: Aus einer 7213 muss eine sieben-zwei-eins-drei werden.
Wie mache ich das?!
Verfasst: Mo, 28.03.2005 20:20
von Frank Lauer
Hallo,
also ohne ein Makro sehe ich da wenig Chancen. Wie fitt bist du in StarBasic?
Ich versuchs einfach mal:
Sub ZahlToText()
Dim oSheet as Object
Dim sZeile1 as String
Dim sZeile2 as String
Dim iZaehler1 as Long
Dim iZaehler2 as Long
oSheet = ThisComponent .Sheets(X) 'Für X die Nummer des Tabellenblattes
For iZaehler1 = 0 To Y 'Für Y die letzte Spalte die konvertiert werden muss
sZeile1 = CStr(oSheet.getCellByPosition(iZaehler1,Z).value) 'Für Z die Zeile die konvertiert werden soll
If Len(sZeile1) > 0 Then
sZeile2 = ""
For iZaehler2 = 1 To Len(sZeile1)
Select Case Mid(sZeile1,iZaehler2,1)
Case "0"
sZeile2 = sZeile2 + "null-"
Case "1"
sZeile2 = sZeile2 + "eins-"
Case "2"
sZeile2 = sZeile2 + "zwei-"
usw.
Case "9"
sZeile2 = sZeile2 + "zwei-"
Case else
sZeile2 = sZeile2 + Mid(sZeile1,iZaehler2,1)
End Select
next iZaehler2
oSheet.getCellByPosition(iZaehler1,Z).string = sZeile2 ' siehe oben
end If
next iZaehler1
end sub
hab das nicht getestet, sollte aber funktionieren. Also tu dir einen Gefallen und mach dir eine Sicherheitskopie des Dokumentes.
Verfasst: Mo, 28.03.2005 20:24
von Stephan
Ich würde dafür eine benutzerdefinierte Funktion verwenden.
Kopiere folgende Funktion in ein Modul det OOo-Bibliotheken oder der Dokumentbibliothek:
Code: Alles auswählen
Function ZIW (a)
a = TRIM(STR(a))
k = ""
For i = 1 to LEN(a)
j = MID(a,i,1)
Select Case j
Case "1"
k = k & "eins-"
Case "2"
k = k & "zwei-"
Case "3"
k = k & "drei-"
Case "4"
k = k & "vier-"
Case "5"
k = k & "fünf-"
Case "6"
k = k & "sechs-"
Case "7"
k = k & "sieben-"
Case "8"
k = k & "acht-"
Case "9"
k = k & "neun-"
Case "0"
k = k & "null-"
End Select
Next i
ZIW = LEFT(k, LEN(k)-1)
End Function
in der Tabelle dann normal aufrufen mit:
=ZIW(<Zelladresse>)
Gruß
Stephan
Verfasst: Mo, 28.03.2005 21:24
von MarkusK
Bitte entschuldigt, aber ich muss nochmal ganz bekloppt fragen (bin Calc-Anfänger): Wie um alles in der Welt gebe ich diese Formel ein, die Stephan freundlicherweise gepostet hat? Wenn ich die im Formelfeld oben eingebe, erscheint die im Feld als Text, aber es wird nichts berechnet

Verfasst: Mo, 28.03.2005 21:59
von Stephan
Zunächst die komplette Funktion in eine Bibliothek kopieren, z.B. die StandardBibliothek von OOo:
Extras>Makros>Makro...
im Dialogfenster links den Ordner Standard suchen da sollte schon Modul1 drunterstehen
Modul1 markieren, dann werden im rechten Fensterteil die enthaltenen Makros sichtbar
eines davon markieren und Bearbeiten-Schaltfläche drücken
jetzt den kompletten Text der Fubction da rein kopieren, vorhandene Makros nicht löschen einfach dazu kopieren
das Basic-IDE Fenster schließen
auf dem Tabellenblatt eine Zelle markieren und das hineinschreiben:
=ZIW(<Zelladresse>)
z.b. wenn 7213 in A1 steht dann in Ergebniszelle schreiben:
=ZIW(A1)
Gruß
Stephan
Verfasst: Do, 16.03.2006 14:40
von dkn
ich bin leider noch nicht vertraut mit calc und wollte fragen, wie ich obige funktion so umändern kann, dass ich wörter einer liste in zahlen umwandle.
als beispiel: alle a,A,ä,Ä sollen zu 1 umgewandelt werden und alle b,B,f,F zu 2, so dass aus Ab 12 wird....
mfg dkn
Verfasst: Do, 16.03.2006 15:17
von Karolus
Hallo dkn
Etwa so:
Function WIZ (a)
a = TRIM(STR(a))
k = ""
For i = 1 to LEN(a)
j = MID(a,i,1)
Select Case j
Case "A"
k = k & "1"
Case "Ä"
k = k & "1"
Case "a"
k = k & "1"
Case "ä"
k = k & "1"
Case "b"
k = k & "2"
Case "B"
k = k & "2"
Case "F"
k = k & "2"
Case "f"
k = k & "2"
' Case "9"
' k = k & "neun-"
' Case "0"
' k = k & "null-"
End Select
Next i
WIZ= LEFT(k, LEN(k)-1)
End Function
Aufrufen aus einer anderen Zelle mit
=WIZ(quellzelle)
oder falls es auch als Wert gebraucht wird:
=WERT(WIZ(quellzelle))
Gruß
Karo
Verfasst: Do, 16.03.2006 15:29
von dkn
bekomme da leider immer einen basic syntax error expected sub????
hab in einer zelle a5 ein wort aä stehen und hab einfach mal den text in makros kopiert und dann in zelle b5 =ZIW(a5) eingegeben und dann kam dieser fehler...
weiß jemand was da falsch mache?
Verfasst: Do, 16.03.2006 15:32
von dkn
bzw. kommt gar nix in der zielzelle... bei den zahlen funktioniert das und bei den buchstaben komischer weise nicht
Verfasst: Do, 16.03.2006 15:58
von dkn
ok ich scheine auch lernfähig zu sein, der fehler is weg und er hat nix angezeigt, da ich nur mit a getestet haben bei aa hat er 1 angezeigt...
die zeile wandlet jetzt also alle buchstaben um - bis auf den letzten das heißt bei aaa würde 11 angezeigt anstatt 111... liegt da ein fehler in der funktion oder geht es nich den letzten auch anzuzeigen?
mfg dkn
Verfasst: Do, 16.03.2006 16:39
von Karolus
Hallo dkn
Versuchs mal damit
Function BUTOZI(formel As String)
Const DIGIT = "1234567890"
ReDim stack(1 To Len(formel) + 1)
Dim A, B, C As Variant , f As Single
Dim i As Integer, n as Integer, e as Integer
A = Array("A", "Ä", "a", "ä", "B", "b", "f", "F")
C = Array(1, 1, 1, 1, 2, 2, 2, 2)
For i = 7 To 0 Step -1
If Instr(1,formel, A(i),0) > 0 then
formel = Replace(formel, A(i), C(i))
n = n + 1
stack(n) = i
End If
Next
BUTOZI = (formel)
End Function
Function Replace( t as String, p as String, s as String) as String
Dim oFunktion as Object
Dim aArgumente(2) As String
' com.sun.star.sheet.FunctionAccess holen
oFunktion = createUnoService("com.sun.star.sheet.FunctionAccess")
aArgumente(0) = t
aArgumente(1) = p
aArgumente(2) = s
Replace = oFunktion.callFunction( "SUBSTITUTE", aArgumente() )
End Function
Anwenden mit
=BUTOZI(quellzelle)
Gruß
Karo
Verfasst: Do, 16.03.2006 17:29
von dkn
ok es funktioniert fast - wie kann ich denn jetzt noch die werte sortieren,
wenn da wert(WIZ(a1)) steht kann ich die nicht mit der sortierfunktion sortiren...