diagonale Addition/Multiplikation

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

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

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: diagonale Addition/Multiplikation

Beitrag von Stephan »

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
Antworten