Quersumme

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Quersumme

Beitrag von Hago »

Hallo,

ich möchte von Zahlen automatisch die Quersumme errechnen lassen und kann die notwendige Formel nicht herausfinden.
Kann mir bitte jemand helfen?

Viele Grüße, Hago
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Quersumme

Beitrag von chrk »

Hallo Hago,
schau mal in die Calc-Hilfe unter dem Stichwort "Benutzerdefinierte Funktionen" und binde dann nach der Anweisung folgenden Code ein (außerhalb der SUB Main, die automatisch angelegt wird):

Code: Alles auswählen

Function QUERSUMME(a as Integer) as Integer
dim b as Integer
meinString=CStr(a)
for i=1 to len(meinString)
	b=b+CInt(mid(meinString,i,1))
next i
QUERSUMME=b
End Function

Die Funktion steht dann aber nur auf Deinem Rechner zur Verfügung, wenn Du das Dokument woanders einsetzen willst, musst Du die Funktion in ein Makromodul in der Datei speichern.


P.S. Ich bin in StarBasic nicht firm - Fehleingaben sind überhaupt nicht abgefangen. Wenn Du also irgendetwas anderes als eine Ganzzahl in die Eingangszelle gibst, passiert irgendwas, nur nicht das, was Du erwartest.
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Quersumme

Beitrag von chrk »

freedom hat geschrieben: [läßt sich die Formel
=SUMMENPRODUKT(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1)*1)
Calc-gerecht anpassen, weiß das jemand]?
:shock: Das muss ich mir erst mal inden Formelassistenten laden.
und bin auf diesen Beitrag gestoßen
http://www.ooo-portal.de/index.php?modu ... topic=3580

Der Vorschlag von FranzX trägt dem Umstand Rechnung, dass man in Tabellenfunktionen keine Schleifen unterbringen kann, und die Quersumme ist eben ein prototypisches Schleifenproblem.
Zuletzt geändert von chrk am Sa, 30.08.2008 20:49, insgesamt 1-mal geändert.
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Quersumme

Beitrag von chrk »

Ok, ich hab's gefunden (nachdem ich eine Quelle für Dein Beispiel gefunden habe, freedom):

Code: Alles auswählen

=SUMMENPRODUKT(WERT(TEIL(A1;ZEILE(INDIREKT("A1:A"&LÄNGE(A1)));1))*1)
Zwei Dinge funktionieren in Calc nicht wie in der ursprünglichen Formel: Die Referenz im INDIREKT-Abschnitt kann nicht in 1:1-Notation angegeben werden, und TEIL()liefert einen String zurück, der nicht automatisch gecastet wird.
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Quersumme

Beitrag von chrk »

Wieso nicht? - Schau noch mal auf die Unterschiede zwischen Deinem Zitat und meiner Variante.

Bei mir hat das so funktioniert.
Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Re: Quersumme

Beitrag von Hago »

Hallo,
Vielen Dank für all die Antworten.
chrk hat geschrieben:

Code: Alles auswählen

=SUMMENPRODUKT(WERT(TEIL(A1;ZEILE(INDIREKT("A1:A"&LÄNGE(A1)));1))*1)
Das funktioniert perfekt.
Ich bedanke mich recht herzlich!

Grüße, Hago
jansch
*
Beiträge: 17
Registriert: Di, 26.08.2008 03:17

Re: Quersumme

Beitrag von jansch »

chrk hat geschrieben:

Code: Alles auswählen

=SUMMENPRODUKT(WERT(TEIL(A1;ZEILE(INDIREKT("A1:A"&LÄNGE(A1)));1))*1)


Leider meldet v1.1.5 Error 504 in (WERT(TEIL(A1;
Scheinbar haben sich Parameter in 2.4.1 verändert.

Leider habe ich keinen blassen Schimmer, wie ich die Funktion an 1.1.5 anpassen soll.
Hat jemand eine Idee und kann mir helfen? Danke i.V.
Zuletzt geändert von jansch am So, 31.08.2008 00:41, insgesamt 1-mal geändert.
Gruß
Jan
Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Re: Quersumme

Beitrag von Hago »

Hallo chrk,

auch Deine basic-Funktion klappt prima.
Vielen Dank.

Allerdings bräuchte ich eine einstellige Quersumme.
Jetzt mache ich eben die Quersumme der Quersumme der Quersumme usw., bis sie einstellig ist.

Vielleicht kannst Du ja die Funktion so ändern, dass sie eine einstellige Quersumme herstellt.
Ich krieg's nicht hin :-)

Hago
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Quersumme

Beitrag von chrk »

Hallo Hago,
das mit der einstelligen Quersumme hättest Du ja eher sagen können, aber so gibt's eben zwei Funktionen, jetzt hatte ich auch mal Zeit für ein Bißchen Kommentar, was da passiert:

Code: Alles auswählen

Function QUERSUMME(a as Integer) as Integer
dim b as Integer
dim meinString as String
meinString=CStr(a)					'Eingabe in String umwandeln, um Anzahl der Stellen zu ermitteln und mit den Stellen zu rechnen
for i=1 to len(meinString)			'Anzahl Stellen bestimmt Anzahl Durchläufe
	b=b+CInt(mid(meinString,i,1))	'Stelle für Stelle addieren
next i
QUERSUMME=b							'Ergebnis zurückgeben
End Function

Function QUERSUMMEEINSTELLIG(a as Integer) as Integer
'Benötigt QUERSUMME()!
Dim b as Integer
Dim meinString as String
meinString=CStr(a)					'Eingabe in String umwandeln, um Anzahl der Stellen zu ermitteln und mit den Stellen zu rechnen

While len(meinString) >1			'Rechne weiter bis einstellig
	b=QUERSUMME(a)					'Berechne die QUERSUMME()
	meinString=CStr(b)				'Belege meinString neu, damit im nächsten Umlauf die Anzahl der Stellen stimmt
	a=b								'Belege a neu, damit  die Quersumme errechnet werden kann
Wend
QUERSUMMEEINSTELLIG=b				'Ergebnis zurückgeben
End Function
QUERSUMMEEINSTELLIG() ruft QUERSUMME() auf, das heißt einerseits, dass Du sie nicht alleine irgendwohin kopieren kannst. Andererseits kannst Du QUERSUMME() für die einfache Quersumme weiter verwenden.

Die Kommentare scheinen hier vielleicht ein wenig flatterhaft, aber in der BASIC-IDE stimmen die Tabs.
Hago
****
Beiträge: 135
Registriert: Di, 07.12.2004 16:44

Re: Quersumme

Beitrag von Hago »

Hallo chrk,
chrk hat geschrieben:das mit der einstelligen Quersumme hättest Du ja eher sagen können...
Ja, entschuldige.
Jedenfalls klappt alles bestens.
Vielen Dank, eine tolle Hilfe.

Viele Grüße, Hago
MarkusKauer
**
Beiträge: 20
Registriert: Mo, 24.03.2008 18:03

Re: Quersumme

Beitrag von MarkusKauer »

chrk hat geschrieben:

Code: Alles auswählen

 =SUMMENPRODUKT(WERT(TEIL(A1;ZEILE(INDIREKT("A1:A"&LÄNGE(A1)));1))*1)[[[code][/quote]
[quote="jansch"]Leider meldet v1.1.5 Error 504[/quote] 
Hey Jan,
ich bin auch an der Lösung interessiert.
Weißt Du mittlerweile, warum es  nicht funktioniert?
Oder noch besser, wie die Formel in 1.1.5 funktioniert?
Meine Dankbarkeit wäre Dir sicher :D .

Markus
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: Quersumme

Beitrag von Karolus »

Hallo
Ich hab zwar kein OOo1.15 zum testen, aber ZEILE kann dort evtl freiwillig nur mit einzelnen Zelladressen arbeiten - ?
Versuch mal die Formel als Matrixformel mit 'strg+shift+enter' abzuschliessen bzw der Option 'Matrixforme' im Formelassistenten

Funktioniert das ?

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Quersumme

Beitrag von chrk »

Hallo Karo,

OOo 1.5 portable gibt es noch bei OOodev.de.

Der Fehler tritt im TEIL()-Abschnitt der Formel auf. Der scheint nicht mit der Matrix klarzukommen, und lässt sich auch mit Eingabe als Matrixformel nicht überreden.

Wenn ich anders herum

Code: Alles auswählen

=ZEILE(INDIREKT("A1:A"&LÄNGE(A1))))[
eingebe, werden mir schön alle stellen des Eingebewertes untereinander als Matrix ausgegeben.

Der Rest ist Schulterzucken.
MarkusKauer
**
Beiträge: 20
Registriert: Mo, 24.03.2008 18:03

Re: Quersumme

Beitrag von MarkusKauer »

Hallo Karo, hallo Christian,

danke für die Tipps.
Das richtige Schulterzucken muss ich wohl noch üben :lol:
Wenn ich versuche Christians Erkenntnis umzusetzen, habe ich die Fehlermledung 508.

Code: Alles auswählen

=ZEILE(INDIREKT("A1:A"&LÄGE(A1))))[


hier sehe ich eine runde Klammer mehr als vorher und die eckige Klammer am Ende ist ein Versehen, oder doch nicht.?

Markus
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Quersumme

Beitrag von chrk »

Moin,
MarkusKauer hat geschrieben: hier sehe ich eine runde Klammer mehr als vorher und die eckige Klammer am Ende ist ein Versehen, oder doch nicht.?
Die eckige Klammer ist ein Artefakt der Forensoftware, in erster Linie hat sie mit schöner Unregelmäßigkeit Zitate verhunzt, aber manchmal nimmt sie sich auch andere Tags vor. Ich habe alle mir bekannten Tricks versucht, es zu vermeiden (inklusive Beitrag löschen und aus der Zwischenablage rekonstruieren).

Ich hatte dann aber gestern abend keine Nerven mehr, den Beitrag noch mal zu editieren, um darauf hinzuweisen.

Das Problem ist älter, siehe auch Fehlerhaftes Absenden neuer Beiträge, [gelöst] ZITAT im Forum und Neuer Bug im Board? - Phantomquotes.

Aber wenn sich Stephans Hoffnung (viewtopic.php?f=17&t=15929&p=82323#p82319) im ersten (jüngsten) der drei Threads bewahrheitet, könnten wir jetzt Ruhe haben.
Antworten