Berechnung von Formeln in Stringform

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Karolus
********
Beiträge: 7524
Registriert: Mo, 02.01.2006 19:48

Re: Berechnung von Formeln in Stringform

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7524
Registriert: Mo, 02.01.2006 19:48

Re: Berechnung von Formeln in Stringform

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Berechnung von Formeln in Stringform

Beitrag 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
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten