🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Alles zur Programmierung im LibreOffice.
gerwin
Beiträge: 5
Registriert: Do 6. Feb 2014, 14:11

Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von gerwin » Do 6. Feb 2014, 23:09

Hallo!

Ich möchte für Calc eine Funktion in LibreOffice-Basic programmieren, mit der ich die Zellinhalte eines übergebenen Bereichs abarbeiten kann.
Die Funktion soll ähnlich wie die interne Summenfunktion in der Tabelle mit =sfunktion(B3:C19) oder ähnlich aufgerufen werden können und dann den Inhalt jeder Zelle dieses Bereichs mit verschiedenen Werten multiplizieren und addieren und das Ergebnis als double zurückgeben.

Ich habs mit
Function sfunktion (Bereich as object) as double

versucht, und wollte dann irgenwie mit Bereich.StartColumn, Bereich.StartRow, Bereich.EndColumn und Bereich.EndRow integer-Werte erhalten mit denen ich dann die einzelnen Zellinhalte abfragen kann.

In Excel war das mit 'Bereich as Range' kein Problem.

Jetzt möchte ich allerdings Microsoft Office endgültig entsorgen, brauche bei dieser hoffentlich letzten Hürde Hilfe.

danke im voraus
gerwin :?

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von karolus » Do 6. Feb 2014, 23:33

Hallo

Kannst du das was die Funktion tun soll ein wenig konkreter beschreiben, mglw. muss man da nicht gleich mit Kanonen auf Spatzen schiessen.

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

gerwin
Beiträge: 5
Registriert: Do 6. Feb 2014, 14:11

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von gerwin » Fr 7. Feb 2014, 00:09

Hallo!

In der tatsächlichen Funktion sollen dann zwei Bereiche übergeben werden.
Jeder numerische Zelleninhalt aus dem ersten Bereich soll mit der Zahl aus dem zweiten Bereich, die in der gleichen Spalte steht multipliziert werden. Die Summe aus diesen Produkten wird dann durch die Summe aus dem zweiten Bereich dividiert und das Ergebnis zurückgegeben.

z.B. =Auswertung (b4:w4; b$17:w$17)

Konkret stehen im ersten (einzeiligen) Bereich die erreichten Punkte bei verschiedenen Aufgaben eines Teilnehmers. Da aber die Aufgaben verschiedene Wertigkeiten haben, gibt es einen zweiten (einzeiligen) Bereich, der gleich viele Spalten hat wie der Bereich mit den erreichten Punkten, in dem die Gewichtung der einzelnen Aufgeben steht. Für jede Aufgabe sollen die erreichten Punkte mit ihrer Gewichtung multipliziert werden. Die Summe dieser Produkte dividiert durch die Summer der Gewichtungen ergibt eine Art "gewichteten Durchschnitt", den ich als Ergebnis dieser Funktion benötige.
(für die Summe der Gewichtungen dürfen nur Gewichtungen jener Aufgaben berücksichtigt werden, bei denen der Teilnehmer auch tatsächlich teilgenommen hat (in der Zelle mit den Punkten steht eine Zahl).


Mein Problem ist der Zugriff auf die Inhalte der Zellen in diesen Bereichen. Diese einzeiligen Bereiche können an verschiedenen Stellen in Tabellenblättern vorkommen und auch unterschiedlich viele Zellen (Aufgaben) enthalten.
Die Übergabe des Zellbereichs in der Funktion hat auch den Vorteil, dass dabei relative oder auch absolute Addressierungen verwendet werden können.

hoffentlich ist diese Erklärung jetzt nicht noch verwirrender!

Ich denke aber, dass eine Funktion wie =summe2(b4:w4), die in einer Schleife alle Zellinhalte aus diesem Bereich addiert und das Ergebnis zurückgibt schon alle wichtigen Befehle enthalten würde, die ich für meine Auswertungsfunktion brauche.

danke für die rasche Rückmeldung
gerwin

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von karolus » Fr 7. Feb 2014, 07:57

Hallo

Code: Alles auswählen

=SUMMENPRODUKT( bereich_1 ; bereich_2) / SUMME( bereich_2 )

Code: Alles auswählen

=SUMMENPRODUKT( B4:W4 ; B$17:W$17 ) / SUMME( B$17:W$17 )

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

gerwin
Beiträge: 5
Registriert: Do 6. Feb 2014, 14:11

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von gerwin » Fr 7. Feb 2014, 08:27

danke Karolus!

Ich habe unter excel selber (ev. unnötigerweise) eine Funktion programmiert, weil nicht jeder Teilnehmer alle Aufgaben macht. Diese werden dann aber auch in die Wertung nicht miteinbezogen.

Wenn als jemand in z.B. E4 keinen Wert oder 0 eingetragen hat, darf auch im zweiten Bereich E17 nicht in die Summe der Gewichtungen miteinbezogen werden.

ev. gehts mit SUMMEWENN, muss ich aber erst am Nachmittag probieren.

Es wäre trotzdem auch interessant, wie ich eine Funktion in Basic erstelle, die einen übergebenen Bereich abarbeitet.

Danke für deine Tipps

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von karolus » Fr 7. Feb 2014, 10:24

Hallo

Code: Alles auswählen

=SUMMENPRODUKT( B4:W4 ; B$17:W$17 ) / SUMMENPRODUKT( B4:W4<>"";B$17:W$17 )
Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

gerwin
Beiträge: 5
Registriert: Do 6. Feb 2014, 14:11

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von gerwin » Fr 7. Feb 2014, 13:49

Screenshot einer Testtabelle
Screenshot einer Testtabelle
screenshotCalc.jpg (102.6 KiB) 4331 mal betrachtet
Danke für die Antwort!

Ich habe den Vorschlag getestet, bekomme aber ein unerwartetes Ergebnis in P5 :shock:

Anstatt der 82 hätte ich wie in M13 77 erwartet.
Wenn ich in J4 0 eintrage, erhalte ich plötzlich in P6 33 statt 28 :?:

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von karolus » Fr 7. Feb 2014, 14:41

Hallo

Hätte ich auch so erwartet, ist anscheinend ein Bug in LO 4.2, das leere Zellen in dem Fall den Wert 1 bekommen.
Erweitere die Formel zu

Code: Alles auswählen

=SUMMENPRODUKT( B4:W4<>"";B4:W4 ; B$17:W$17 ) / SUMMENPRODUKT( B4:W4<>"";B$17:W$17 )
Ich werde mal schauen ob es schon einen Bugreport gibt.

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von karolus » Fr 7. Feb 2014, 15:54

Hallo

Hier ist der Link zur Bugmeldung wäre nützlich wenn den jemand bestätigen könnte.

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

gerwin
Beiträge: 5
Registriert: Do 6. Feb 2014, 14:11

Re: Bereich in benutzerdefinierter Calc-Funktion abarbeiten

Beitrag von gerwin » Fr 7. Feb 2014, 15:55

Hallo Karolus!

Vielen Dank für die Mühen!

Die neue Formel macht genau was ich brauche. :D

Damit ist mein vordringliches Problem gelöst.

Vielleicht kommt jemandem im Forum einmal eine Anleitung unter, wie man die Zellen eines Bereichs, der einer benutzerdefinierten Funktion als Argument übergeben wird, zellenweise abarbeiten kann, dann bitte um eine Nachricht.
Ich habe dazu alle LibreOffice-Basic Anleitungen die ich im Internet finden konnte durchsucht, habe aber nichts passendes gefunden. Es gab nur Anleitungen zum Programmieren eigener Funktionen bzw. zu Prozeduren, die einen bekannten Bereich bearbeiten.
Ich glaube,eine Anleitung wie man z.B. selber eine Summenfunktion der Art 'SUMME2(D2:D9)' programmieren kann, würde schon alles notwendige enthalten.

Das wichtigste ist für mich allerdings jetzt gelöst.

Vielen Dank für die rasche Hilfe!
gerwin


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten