Zahlen in Buchstaben konvertieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

MarkusK
*
Beiträge: 10
Registriert: Sa, 05.02.2005 17:57

Zahlen in Buchstaben konvertieren

Beitrag 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?!
Frank Lauer
***
Beiträge: 88
Registriert: Mi, 30.07.2003 18:06
Wohnort: Wiesloch

Beitrag 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.
OOo 2.1 , Win XP
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag 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
MarkusK
*
Beiträge: 10
Registriert: Sa, 05.02.2005 17:57

Beitrag 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 :roll:
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag 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
dkn
Beiträge: 7
Registriert: Do, 16.03.2006 14:34

Beitrag 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
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Beitrag 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
dkn
Beiträge: 7
Registriert: Do, 16.03.2006 14:34

Beitrag 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?
dkn
Beiträge: 7
Registriert: Do, 16.03.2006 14:34

Beitrag von dkn »

bzw. kommt gar nix in der zielzelle... bei den zahlen funktioniert das und bei den buchstaben komischer weise nicht
dkn
Beiträge: 7
Registriert: Do, 16.03.2006 14:34

Beitrag 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
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Beitrag 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
dkn
Beiträge: 7
Registriert: Do, 16.03.2006 14:34

Beitrag 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...
Antworten