diagonale Addition/Multiplikation

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: diagonale Addition/Multiplikation

Re: diagonale Addition/Multiplikation

von Stephan » Sa, 26.10.2019 22:07

Wie aber stehts mit der Addition?
Diese Formel habe ich selbst nur zitiert und weiß nichts weiter darüber. Die Quelle hatte ich angegeben.
Und: Könntest Du mir bitte die Makro-Befehle erläutern?
Ausführliche Informationen zu allen Basic-Befehlen befinden sich in der OO-Programmhilfe.
Es lässt sich verschieben, aber dann gibt es kein Ergebnis mehr!
Die benutzerdefinierte Funktion enthält den Verweis auf ein bestimmtes Tabellenblatt, im Konkreten das Erste:

Code: Alles auswählen

With ThisComponent.Sheets.getByIndex(0)
weil der allgemeine Verweis:

Code: Alles auswählen

With ThisComponent.CurrentController.ActiveSheet
in der benutzerdefinierten Funktion nicht richtig funktioniert hat. Nötigenfalls müsste man die Funktion um einen Parameter erweitern, nämlich den Tabellenindex:

Code: Alles auswählen

Function diagonal_mult(SpalteLinkeZelle, ZeileLinkeZelle, SpalteRechteZelle, ZeileRechteZelle, Tabellenindex)
	With ThisComponent.Sheets.getByIndex(Tabellenindex)
		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 in der Tabelle entsprechend aufrufen, z.B.:

=DIAGONAL_MULT(0;5;5;0;0)


Gruß
Stephan

Re: diagonale Addition/Multiplikation

von Stephan » Sa, 26.10.2019 10:36

Die Formel:

=DIAGONAL_MULT(0;5;5;0)

ist nur der Aufruf der benutzerdefinierten Funktion DIAGONAL_MULT().

In der Klammer müssen 4 Zahlen stehen, durch Semikolon getrennt. Diese Zahlen entsprechen (von links nach rechts):

-Spaltenindex der linken Zelle der Diagonale
-Zeilenindex der linken Zelle der Diagonale
-Spaltenindex der rechten Zelle der Diagonale
-Zeilenindex der rechten Zelle der Diagonale

Die Indexzählung beginnt bei 0,0 (entspricht Zelle A1). Für das ursprüngliche Beispiel der Diagonale A15:C17 müsste also aufgerufen werden wie folgt:

=DIAGONAL_MULT(0;14;2;16)


Gruß
Stephan

Re: diagonale Addition/Multiplikation

von Stephan » Sa, 26.10.2019 09:48

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

Re: diagonale Addition/Multiplikation

von Stephan » Fr, 25.10.2019 21:41

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

Re: diagonale Addition/Multiplikation

von Stephan » Fr, 25.10.2019 18:26

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

Re: diagonale Addition/Multiplikation

von mikeleb » Fr, 25.10.2019 18:16

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))

Re: diagonale Addition/Multiplikation

von mikeleb » Fr, 25.10.2019 18:07

Hallo,

Code: Alles auswählen

=SUMMENPRODUKT(L56:Q61;EINHEITSMATRIX(ZEILEN(L56:Q61)))

Re:

von Stephan » Fr, 25.10.2019 18:07

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

Re: diagonale Addition/Multiplikation

von Stephan » Fr, 25.10.2019 17:56

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) 118-mal heruntergeladen

Re: diagonale Addition/Multiplikation

von Stephan » Fr, 25.10.2019 16:20

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

Re: diagonale Addition/Multiplikation

von Stephan » Fr, 25.10.2019 16:10

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

Re: diagonale Addition/Multiplikation

von Stephan » Fr, 25.10.2019 15:37

=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) 6792 mal betrachtet

Re: diagonale Addition/Multiplikation

von Mondblatt24 » Fr, 25.10.2019 15:11

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

Re: diagonale Addition/Multiplikation

von Mondblatt24 » Fr, 25.10.2019 15:10

Re: diagonale Addition/Multiplikation

von Stephan » Fr, 25.10.2019 14:46

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

Nach oben