❤ Unterstütze jetzt das LIBREOFFICE-Forum ❤

[gelöst]Dezimalpunkt aus String entfernen damit val() funktioniert

Alles zur Programmierung im LibreOffice.
Antworten
bugfisch
Beiträge: 12
Registriert: So 12. Apr 2020, 19:23

[gelöst]Dezimalpunkt aus String entfernen damit val() funktioniert

Beitrag von bugfisch » Sa 4. Jul 2020, 22:59

Hallo,
habe in einer Tabelle (Daten müssen so bleiben) Beträge mit einem Punkt "1.287,00 €" und möchte daraus eine Zahl machen. Val() arbeitet hier leider nicht gut!

Code: Alles auswählen

Sub Main
	dim st as string
	st = "1.287,00 €"
	ld_x = val(st)
	msgbox ld_x   ' ergibt 1,287
End Sub

Mit welcher String-Funktion würdet ihr das bewerkstelligen?

Danke
Zuletzt geändert von bugfisch am Di 7. Jul 2020, 20:15, insgesamt 1-mal geändert.
LO 3.5.2 Win10 64bit

Wanderer
Beiträge: 447
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Dezimalpunkt aus String entfernen damit val() funktioniert

Beitrag von Wanderer » Sa 4. Jul 2020, 23:44

Hallo,

wahrscheinlich mit keiner. Ich würde wie in diesem Thread
https://de.openoffice.info/viewtopic.ph ... 40#p291040
besprochen entweder neu importieren oder wie am Ende von Gast Peter vorgeschlagen kopieren und als unformatierten Text wieder einfügen.

Da es hier nicht um ein Datum geht, probier beim Import US-Englisch, denn Du hast offensichtlich Zahlen im amerikanischen Format importiert.

Mfg, Jörn

PS: Ansonsten: InStr
s. https://wiki.openoffice.org/wiki/Docume ... e_Library)
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

craig
Beiträge: 636
Registriert: Do 21. Apr 2016, 11:42

Re: Dezimalpunkt aus String entfernen damit val() funktioniert

Beitrag von craig » So 5. Jul 2020, 01:13

Hallo,

teste dies:

Code: Alles auswählen

REM  *****  BASIC  *****

REM https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial

Sub Main
Dim sStr as string
Dim fWert as Double
Dim nLaenge as Integer

sStr = "1.287,00 €"
	
	' Gesamtlänge des Strings ermitteln
	nLaenge=Len(sStr)
	
	' Nur den linken Teil ohne Leerzeichen und €-Symbol erfassen
	' Ergebnis =  1.287,00
	sStr=left(sStr,nLaenge-2)	' -2	→	Leerzeichen und Euro-Symbol
	
	' Die Replace-Funktione aufrufen und die Ersetuzungsparameter übergeben.
	' In diesem Fall wird der Punkt durch NICHTS ersetzt
	sStr=Replace(sStr,".","")

	' Runtime-Funktionen: https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Conversion_Functions_(Runtime_Library)
	' String per Runtime-Funktion (cDbl) in einen Doublewert umwandeln,
	' so wird aus einer Ziffer eine Zahl.
	' Eine Testberechnung:
	fWert=cDbl(sStr)	+ 1000.52
		
		print fWert

End Sub

REM Quelle: https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Strings_%28Runtime_Library%29
Function Replace(Source As String, Search As String, NewPart As String)
  Dim Result As String  
  Result = join(split(Source, Search), NewPart)
  Replace = Result
End Function
Beachte die Kommentare im Code und die Website-Adressen zu den Doku's.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 6.4.4.2 (x64) • AOO 4.1.6

bugfisch
Beiträge: 12
Registriert: So 12. Apr 2020, 19:23

Re: Dezimalpunkt aus String entfernen damit val() funktioniert

Beitrag von bugfisch » So 5. Jul 2020, 11:15

Hallo,
vielen vielen Dank für die Lösung. Habe mir gleich eine kompakte Funktion geschrieben die ich dann immer verwenden kann:

Code: Alles auswählen

Sub Main
	Dim sStr$
	Dim fWert#
	sStr = "1.287,01 €"
	fWert = myval(sStr)
	print fWert
end sub

Function myval(sBetrag as string)
	Dim nLaenge as Integer
	nLaenge=Len(sBetrag)
	sBetrag=left(sBetrag,nLaenge-2)
	sBetrag=join(split(sBetrag,"."),"")
	myval=cDbl(sBetrag)
end function
Schönen Sonntag noch
LO 3.5.2 Win10 64bit

F3K Total
Beiträge: 1984
Registriert: So 10. Apr 2011, 10:10

Re: Dezimalpunkt aus String entfernen damit val() funktioniert

Beitrag von F3K Total » So 5. Jul 2020, 13:05

Moin,
wenn es sich um eine Calc-Tabelle handelt, warum nutzt du nicht einfach die Funktion WERT(), ?

Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

bugfisch
Beiträge: 12
Registriert: So 12. Apr 2020, 19:23

Re: Dezimalpunkt aus String entfernen damit val() funktioniert

Beitrag von bugfisch » So 5. Jul 2020, 21:28

F3K Total hat geschrieben:
So 5. Jul 2020, 13:05
Moin,
wenn es sich um eine Calc-Tabelle handelt, warum nutzt du nicht einfach die Funktion WERT(), ?

Gruß R
Wüsste nicht, dass ich das im Basic-Code einsetzen kann. :o
LO 3.5.2 Win10 64bit

mikele
Beiträge: 1063
Registriert: Mo 1. Aug 2011, 20:51

Re: Dezimalpunkt aus String entfernen damit val() funktioniert

Beitrag von mikele » Mo 6. Jul 2020, 11:48

Hallo,
das kann man, aber die Frage ist eher, ob du die Konvertierung wirklich per Makro machen willst.
habe in einer Tabelle (Daten müssen so bleiben) Beträge mit einem Punkt "1.287,00 €"
Sind es in den Zellen wirklich Strings? Wenn ja, warum?
möchte daraus eine Zahl machen
Was ist das Ziel? (wenn die Daten gleichzeitig so bleiben müssen???)
Gruß,
mikele

bugfisch
Beiträge: 12
Registriert: So 12. Apr 2020, 19:23

Re: Dezimalpunkt aus String entfernen damit val() funktioniert

Beitrag von bugfisch » Di 7. Jul 2020, 18:50

mikele hat geschrieben:
Mo 6. Jul 2020, 11:48
Sind es in den Zellen wirklich Strings? Wenn ja, warum?
Ja ist Quatsch, wurde von mir mal falsch festgelegt. Werde ich aber ändern - ist nur etwas Aufwand.

Danke
LO 3.5.2 Win10 64bit

Antworten