Zahl auf Zelle addieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

pcsorglos
Beiträge: 3
Registriert: Do, 05.03.2015 13:19

Zahl auf Zelle addieren

Beitrag von pcsorglos »

Hallo,

ich bin auf der Suche nach einer Lösung, um Zahlen auf eine Zelle zu addieren. Wir müssen des öfteren Statistiken erstellen. Die Werte für die Statistik werden aus Rechnungen entnommen.

Meine calc-Tabelle besteht aus 3 bzw. 4 Spalten

1 = Nr. der Behandlung (ca. 30 Behandlungsarten / Zeilen, z.Zt.), 2= Bezeichnung der Behandlung, 3= Anzahl, 4= Anzahl (wird im Moment nicht genutzt)

Nun entnehme ich die Anzahl der geleisteten Behandlung aus der gestellten Rechnung und gebe sie in die entsprechende Zeile ein. Hier soll der eingegebene Wert auf die vorhandene Anzahl aufaddiert werden.

Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt. Ich verwende '000 4.1.1, Windows 7 Ultimate, '

Für Eure Vorschläge, vielen Dank im Voraus.

Gruss
pcsorglos
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Zahl auf Zelle addieren

Beitrag von Karolus »

Hallo

Ein Calc-tabelle stellt dir mehr wie eine Million Zeilen zur Verfügung
benutze die fortlaufend für Art, Bezeichnung und Anzahl
(erleichtere dir die Eingabe von 1 und 2 per →Daten→Gültigkeit →Zulassen→Zellbereich...)

und aggregiere die Daten hinterher per →Daten→Datenpilot aka Pivottabelle
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zahl auf Zelle addieren

Beitrag von clag »

Hallo pcsorglos,

Grundsätzlich schließe ich mich Karolus Meinung an,
zumal das so wie du es handhaben möchtest keine überprüfbaren Ergebnisse liefert (Historie der Werte)

Aber das ist ja dein Risiko 8)

Da ich aber auch weiß "der Mensch ist bequem" habe ich dir trotzdem mal ein Beispiel erstellt das deinen Wunsch erfüllt.
In einer "Hilfsspalte" gibst du einen Wert ein der wird umgehend zum Wert links davon addiert,
der Wert bleibt bestehen, damit zumindest die letzte Eingabe sichtbar ist. Überschreiben des Wertes addiert weiter auf.
Das Makro ist wirksam im Bereich E1:D30
Werte_addieren.ods
(9.97 KiB) 261-mal heruntergeladen
viel Spaß
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
pcsorglos
Beiträge: 3
Registriert: Do, 05.03.2015 13:19

Re: Zahl auf Zelle addieren

Beitrag von pcsorglos »

Hallo,

erst einmal herzlichen Dank für Eure Antworten.

@ Karolus
Davon mal abgesehen, dass ich erst mal nachschlagen musste was Du mit 'aggregieren' meinst, hast Du wohl noch nicht so oft eine öde Statistik von hunderten von Patienten und noch mehr Rechnungspositionen über ein komplettes Geschäftsjahr erstellen müssen. Wenn ich jetzt hergehen muss und für jede Rechnung alle Positionen erfassen muss, um die Anzahl zu erfassen, hat das meiner Meinung nach nix mit Bequemlichkeit zu tun, wie 'clag' schreibt, sondern einfach mit der Tatsache eine einfache Tabelle nicht unnötig aufzublähen.

Trotzdem Danke für Deinen Vorschlag.

@clag
Danke für Deine Lösung. An so etwas hatte ich auch schon gedacht, mit 2 Spalten zu arbeiten. Bin dann aber immer an dem Problem des Aufsummierens gescheitert. Werde das so übernehmen. Hätte aber noch eine Frage dazu:
Da ich meine Statistik im Format DINA 4 quer erstelle, um alle Positionen auf eine Seite zu bekommen, müsste ich die Spalten anpassen. Was muss ich da ändern, um dein Script auf meine Belange zu ändern. Spalte 'Summe 1' wäre C3 bis C18, Plus 1 wäre von E3 bis E18, 'Summe 2' I 3 bis I 18, Plus2 von K3 bis K18.
Hab mir Dein Script zwar mal angesehen, aber mir ist nicht klar wie/wo Du den Zellbereich festlegst. Vielleicht kannst Du mir da noch mal weiterhelfen. Danke.

Gruss
pcsorglos
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Zahl auf Zelle addieren

Beitrag von clag »

Hallo pcsorglos,


hier der nach deinen Angaben angepasste Code

Code: Alles auswählen

Sub AddItNnow(event)
	odoc=thisComponent
	oSheet = oDoc.sheets(0)
	oZelle = oDoc.getCurrentSelection()
	iStartCol = oZelle.RangeAddress.StartColumn
	iStartRow = oZelle.RangeAddress.StartRow
	if iStartCol=4 or iStartCol=10 then
		if iStartRow < 18 and iStartRow > 1 then
			addValue = osheet.getCellByPosition(iStartCol,iStartRow).value
			oldValue = osheet.getCellByPosition(iStartCol-2,iStartRow).value
			osheet.getCellByPosition(iStartCol-2,iStartRow).value = oldValue+addValue
		end if
	end if 
end sub
die Adressierung erfolgt meistens nach dem Index der beginn bei 0,
Spalte D ist also "Column 3"; Zeile 1 "Row 0"; getCellByPosition(4,17) entspricht "E18"

die beiden "if" Abfragen stellen sicher das nur Veränderungen der Werte innerhalb des gewünschten Bereiches zum aufaddieren führt,
ausgelöst wird das Makro durch das Tabellenblattereignis > Werte geändert.
Du musst also in deiner Tabelle ebenfalls das Tabellenblattereignis mit dem Makro verknüpfen.
Werte_addieren_2x.ods
(10.71 KiB) 125-mal heruntergeladen
viel Erfolg
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
pcsorglos
Beiträge: 3
Registriert: Do, 05.03.2015 13:19

Re: Zahl auf Zelle addieren

Beitrag von pcsorglos »

Hallo clag,

irgendwo hakt es noch bei mir. Ich habe Deine Datei verwendet und probiert. Da funktionierte der 2. Bereich nicht. Dann habe ich den abgebildeten Code verwendet und die Datei angepasst. Das funktioniert jetzt.

Dann habe ich das Script aus Deiner Datei als neues Makro an meine Datei angefügt. Funktioniert nicht.Rechnet einfach nicht. Dann habe ich meine Tabelle in Deine Datei kopiert. Läuft.

Verstehe nicht, warum das Script in meiner Datei nicht läuft. Könntest Du mir da noch mal auf die Sprünge helfen. Möchte nur verstehen, warum es in meiner Datei nicht läuft. Ansonsten alles Gut. Danke.

:D Hab es gefunden. Deine Bemerkung 'Du musst also in deiner Tabelle ebenfalls das Tabellenblattereignis mit dem Makro verknüpfen.' hat mir nix gesagt, aber mich zum Grübeln gebracht. Hatte ich vorher noch nie gemacht und rausgefunden, wie man es machen muss. Nun klappt es. Danke nochmals für das Script.

Gruss
pcsorglos
Antworten