Seite 1 von 1

Re: Berechnung von Formeln in Stringform

Verfasst: Di, 28.04.2015 12:38
von Karolus
Nein in Calc gibts diese Funktion nicht.

Aber das ganze ist doch trivial per →Suchen und ersetzen lösbar:

Kopiere die "Formeln" in die Spalte in der du die Ergebnisse haben möchtest markiere die Ergebnisspalte und:

→Bearbeiten→Suchen und Ersetzen:
  • Suche ^.*$
    ersetze durch =&
    mit den Optionen:
    • [x]regulärer Ausdruck
      [x]nur in Selektion

Re: Berechnung von Formeln in Stringform

Verfasst: Mi, 29.04.2015 17:49
von Karolus
Hallo

Alsogut - hier ist ein Makro das den Text aus der aktuellen Zelle nimmt und ihn als Formel in die Zelle drei Spalten weiter rechts als Formel einträgt.

Code: Alles auswählen

Sub evaluate_offset

    off = 3 '3 Spalten nach rechts-- bitte anpassen'
    doc = thisComponent
    sel = doc.CurrentSelection
    sheet = sel.Spreadsheet
    calcstring = sel.String
    addr = sel.CellAddress
    i_row = addr.Row
    i_col = addr.Column
    target = sheet.getCellByPosition(i_col+off, i_row)
    target.FormulaLocal = "=" & calcstring

End Sub

Re: Berechnung von Formeln in Stringform

Verfasst: Mi, 29.04.2015 18:22
von clag
hallo Gast und alle anderen,

habe mal für dein Anliegen ein Makro erstellt, das deine Wünsche und etwas mehr erfüllt
also einen Textstring in einer Zelle in eine Formel wandeln,
oder einen solchen FormelString aus einer andern Zelle holen und als Formel einfügen.
Für einzelne Zellen oder markierte Bereiche

Code: Alles auswählen

Sub TextToFormula
	oCalc = thisComponent
	osheet = oCalc.CurrentController.ActiveSheet
	sQFx = "QuickFormula"
	if InStr(oCalc.Currentselection.absoluteName,";") > 1 then 
		nRanges = oCalc.CurrentSelection.Count
	else
		nRanges = 1
	end if
	for N=0 to nRanges-1
		if nRanges =1 then oRangeAddress = oCalc.CurrentSelection.RangeAddress 
		if nRanges >1 then 
			oRangeAddress = oCalc.CurrentSelection.RangeAddresses(N)
		end if
		StartC = oRangeAddress.StartColumn
		StartR = oRangeAddress.StartRow
		LastC = oRangeAddress.EndColumn
		LastR = oRangeAddress.EndRow
		for C=StartC to LastC
			for R=StartR to LastR
				myFormulatext = oSheet.getCellByPosition(C,R).Formula
				if myFormulatext="" or Left(myFormulatext,1)="=" then
					goto jump:
				else
					if left(myFormulatext,3)="QFx" and _
					oCalc.NamedRanges.hasByName(sQFx & mid(myFormulatext,4)) then
						sFstring = oSheet.getCellRangeByName(sQFx & mid(myFormulatext,4)).Formula
						sFString = "=" & join(split(sFstring,"“"),"""")
						oSheet.getCellByPosition(C,R).FormulaLocal = sFString
					else
						oSheet.getCellByPosition(C,R).FormulaLocal = "=" & myFormulatext
					end if
				end if
				jump:
			next
		next
	next
End Sub

textFormula_to_activeFormula.ods
(14.29 KiB) 57-mal heruntergeladen
viel Spaß und Erfolg damit


PS
Karolus war wieder etwas schneller dafür ist mein Makro vielleicht etwas universeller und komfortabler :D