Zahlen in Buchstaben konvertieren
Moderator: Moderatoren
Zahlen in Buchstaben konvertieren
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?!
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?!
-
- ***
- Beiträge: 88
- Registriert: Mi, 30.07.2003 18:06
- Wohnort: Wiesloch
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.
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
Ich würde dafür eine benutzerdefinierte Funktion verwenden.
Kopiere folgende Funktion in ein Modul det OOo-Bibliotheken oder der Dokumentbibliothek:
in der Tabelle dann normal aufrufen mit:
=ZIW(<Zelladresse>)
Gruß
Stephan
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
=ZIW(<Zelladresse>)
Gruß
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
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
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
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
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
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
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
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