diagonale Addition/Multiplikation

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Mondblatt24
*******
Beiträge: 1143
Registriert: So, 14.05.2017 16:11

Re: diagonale Addition/Multiplikation

Beitrag von Mondblatt24 »

Hallo,
wimsey hat geschrieben: Fr, 25.10.2019 13:20 Geht das auch einfacher? So etwa(Summe=A15:C17)? Und geht so etwas auch mit den anderen Grundrechenarten?
=Summe(A15:C17)
mal ausprobiert? 😉

Gruß Peter
Win 11 (x64) ▪ 24.2.2.2 (x64) ▪ AOO Portable 4.1.15
Wurde die Frage zutreffend beantwortet bitte den Betreff der Eingangsfrage mit [GELÖST] ergänzen. Beschreibung
Mondblatt24
*******
Beiträge: 1143
Registriert: So, 14.05.2017 16:11

Re: diagonale Addition/Multiplikation

Beitrag von Mondblatt24 »

Von weiteren Einträgen innerhalb der Matrix war keine Rede.

=Summe(A15;B16;C17)
Win 11 (x64) ▪ 24.2.2.2 (x64) ▪ AOO Portable 4.1.15
Wurde die Frage zutreffend beantwortet bitte den Betreff der Eingangsfrage mit [GELÖST] ergänzen. Beschreibung
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

wimsey hat geschrieben: Fr, 25.10.2019 14:29 Klar!
Aber das gibt die Summe des gesamten Quadrates nicht der Diagonalen!

Und =Produkt(A15+B16) ergibt nur die Summe.
z.B. mit folgender Matrixformel:
{=SUMME(A1:C3*(ZEILE(A1:C3)=SPALTE(A1:C3)))}

siehe:
https://www.extendoffice.com/de/documen ... al.html#a1


Gruß
Stephan
Mondblatt24
*******
Beiträge: 1143
Registriert: So, 14.05.2017 16:11

Re: diagonale Addition/Multiplikation

Beitrag von Mondblatt24 »

Win 11 (x64) ▪ 24.2.2.2 (x64) ▪ AOO Portable 4.1.15
Wurde die Frage zutreffend beantwortet bitte den Betreff der Eingangsfrage mit [GELÖST] ergänzen. Beschreibung
Mondblatt24
*******
Beiträge: 1143
Registriert: So, 14.05.2017 16:11

Re: diagonale Addition/Multiplikation

Beitrag von Mondblatt24 »

wimsey hat geschrieben: Fr, 25.10.2019 14:52 Nun, kennst Du eine Lösung?

Da:
=SUMME(L56:Q61*(ZEILE(L56:Q61)=SPALTE(L56:Q61)))

kommt bei mir Null raus.(Treppe abwärts L56 bis Q61.
Ist eine Matrixformel mit Strg+Shift+Enter abschließen
Win 11 (x64) ▪ 24.2.2.2 (x64) ▪ AOO Portable 4.1.15
Wurde die Frage zutreffend beantwortet bitte den Betreff der Eingangsfrage mit [GELÖST] ergänzen. Beschreibung
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

=SUMME(L56:Q61*(ZEILE(L56:Q61)=SPALTE(L56:Q61)))
ist schlicht keine Matrixformel und wird deshalb nicht wie gewünscht funktionieren.

Folge deshalb dem Ratschlag:
Ist eine Matrixformel mit Strg+Shift+Enter abschließen
oder setze den Haken bei Matrix im Assistenten:


Gruß
Stephan
Dateianhänge
matrix-formel.gif
matrix-formel.gif (36.24 KiB) 6314 mal betrachtet
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

Ich komme auch mit Strg+Shift+Enter nur auf Null.
mutmaßlich weil Du versuchst eine bereits abgeschlossene Formel nachträglich erneut mit Strg+Shift+Enter abzuschliessen.

Wenn ja dann:
markiere die Zelle mit der Formel, lösche in der Rechenzeile die letzte KLammer der Formel, tippe diese Klammer nun per Tastatur gleich wieder ein und schliesse nun mit Strg+Shift+Enter ab.
Wie ist der Name der Funktion?
Abschliessen einer Matrixformel? (so würde ich es nennen)


Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

Geht das auch mit den anderen Grundrechenarten?
Dem Grunde nach nur mit Multiplikation, denn Subtraktion und Division sind doch nur sinnvoll mit jeweils zwei Zellen denkbar.

Eine Formel für Multiplikation finde ich auf die Schnelle nicht, evtl. muss man das mit einer benutzerdefinierten Funktion lösen, z.B. sollte gehen:

Code: Alles auswählen

Function diagonal_mult(SpalteLinkeZelle, ZeileLinkeZelle, SpalteRechteZelle, ZeileRechteZelle)
	With ThisComponent.CurrentController.ActiveSheet
		If ZeileLInkeZelle > ZeileRechteZelle Then
				'von links aufwärts nach rechts
				z = ZeileLinkeZelle
				s = SpalteLinkeZelle
				k = .getCellByPosition(s, z).Value
				Do While s < SpalteRechteZelle
					s = s + 1
					z = z - 1
					k = k * .getCellByPosition(s, z).Value
				Loop
			Else
				'von links abwärts nach rechts
				z = ZeileLinkeZelle
				s = SpalteLinkeZelle
				k = .getCellByPosition(s, z).Value
				Do While s < SpalteRechteZelle
					s = s + 1
					z = z + 1
					k = k * .getCellByPosition(s, z).Value
				Loop
		End If
	End With
	diagonal_mult = k
End function
und aufrufen mit:

=DIAGONAL_MULT(0;3;3;0)

für Multiplizieren der Diagonale A4:D1


Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

wie implementiere ich denn das makro?
benutzerdefinierte Funktionen müssen bei OO in der Bibliothek Standard abgelegt sein um zu funktionieren. Beispiel anhängend.


Gruß
Step
Dateianhänge
multiplikation.ods
(9.81 KiB) 101-mal heruntergeladen
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re:

Beitrag von Stephan »

wimsey hat geschrieben: Fr, 25.10.2019 17:59 Auch bei deinem Beispiel habe ich #Wert!
Wieso "auch"?

Vorher hattest Du #Name, was daran liegt das die Funktion nicht richtig abgelegt war, wenn Du jetzt #Wert hast dann ist die Ausführung von Makros deaktiviert. Aktiviere diese Unter Extras-Optionen-OpenOffice-Sicherheit-Makrosicherheit indem Du dort auf "niedrig" oder "mittel" stellst. Bei "mittel" kommt jedes Mal eine Nachfrage wo Du Makros zulassen musst, bei "niedrig" kommt keine Nachfrage.


Gruß
Stephan
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: diagonale Addition/Multiplikation

Beitrag von mikeleb »

Hallo,

Code: Alles auswählen

=SUMMENPRODUKT(L56:Q61;EINHEITSMATRIX(ZEILEN(L56:Q61)))
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: diagonale Addition/Multiplikation

Beitrag von mikeleb »

Hallo,
für das Produkt:

Code: Alles auswählen

=PRODUKT(MMULT((L56:Q61)*EINHEITSMATRIX(ZEILEN(L56:Q61));ZEILE(L56:Q61)/ZEILE(L56:Q61)))
Ergänzung:
oder auch so

Code: Alles auswählen

=PRODUKT(WENN(ZEILE(L56:Q61)-ZEILE(L56)=SPALTE(L56:Q61)-SPALTE(L56);L56:Q61;1))
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

wimsey hat geschrieben: Fr, 25.10.2019 18:12 hi stephan:

Zeile 3 des Scripts:
Basic-Laufzeitfehler
Argument ist nicht optional
Die Beispieldatei funktioniert bei mir tadellos. Falls Du selbst die Formel geändert hast ist mutmaßlich ein Argument falsch, so wie es in der Fehlermeldung steht.



Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

Ich habe das script so von dir übernommen. Warum das dann nicht hinhaut???
Ich weiß nicht was es heißt wenn Du davon redest das Script zu übernehmen. Du musst die Datei öffnen und gut, es muss nichts gesondert übernommen werden.

Wie sieht denn der Aufruf der Funktion in der Zelle aus? Steht dort (in Zelle D11) weiterhin:

=DIAGONAL_MULT(0;5;5;0)

?


Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

Ergebnis ist weiterhin #WERT!
dann werden keine Makros ausgeführt.
Da beim Öffnen Makro-Viren-Möglichkeits-Meldung kam, habe ich in Extras/Einstellungen/OO/Sicherheit/Makrosicherheit die Sicherheitsstufe auf niedrig gesetzt.
Was nichts bewirkt, solange das Dokument nicht geschlossen und neu geöffnet wird.
F9-Taste brachte aber kein neues Ergebnis.
Kann es auch nicht, da die benutzerdefinierte funktion keinen direkten Bezug auf eine Zelle nimmt

verwende UMSCHALT + STRG + F9

Auch das wird natürlich nur funktionieren, wenn nach dem Ändern der Makro-Sicherheitseinstellung das Dokument geschlossen und neu geöffnet wurde



Gruß
Stephan
Antworten