Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Inkrementieren in Calc

24 views
Skip to first unread message

Albrecht Mehl

unread,
Oct 30, 2008, 3:06:03 AM10/30/08
to
Zukünftig wird folgende Aufgabe häufiger auf mich zukommen:

1. Nimm den Inhalt einer bestimmten Zelle.
2, Addiere 1 dazu.
3. Speichere den um eins erhöhten Wert an die ursprüngliche Stelle.

Da dies, wie geschrieben, oft vorkommen wird, will ich dafür ein Makro
basteln.

Mangels Erfahrung: wie führt man diese Aufgabe am einfachsten und
elegantesten aus?

Ich bitte um Nachsicht für diese Frage, für die einige Experten hier
wohl nur ein müdes Lächeln übrig haben.

A. Mehl
--
Albrecht Mehl |eBriefe an:mehl bei freundePunkttu-darmstadtPunktde
Schorlemmerstr. 33 |Tel. (06151) 37 39 92
D-64291 Darmstadt, Germany|sehenswert - ungefähr 'Wir einsam im All'
http://www.phrenopolis.com/perspective/solarsystem/index.html

Martina Diel

unread,
Oct 30, 2008, 3:45:38 AM10/30/08
to
* Albrecht Mehl <AlbrechtMe...@iesy.net>:

> Zukünftig wird folgende Aufgabe häufiger auf mich zukommen:

> 1. Nimm den Inhalt einer bestimmten Zelle.
> 2, Addiere 1 dazu.
> 3. Speichere den um eins erhöhten Wert an die ursprüngliche Stelle.

> Da dies, wie geschrieben, oft vorkommen wird, will ich dafür ein Makro
> basteln.

> Mangels Erfahrung: wie führt man diese Aufgabe am einfachsten und
> elegantesten aus?

> Ich bitte um Nachsicht für diese Frage, für die einige Experten hier
> wohl nur ein müdes Lächeln übrig haben.

Mit der 1 im Zwischenspeicher und dann "Edit - Paste Special -
Operations Add" solltest du weiterkommen.
(Habe hier die engl. Version, aber ich denke, wie die deutsche
Menubezeichnungen sind lässt sich erschliessen)

--
10. November 2008, Hochschule der Medien in Stuttgart:
Vortrag "Tipps und Tricks fuer die IT-Karriere".
http://www.aki-stuttgart.de/anzeige.php?id=993

Volker Lenhardt

unread,
Oct 30, 2008, 5:38:08 AM10/30/08
to
Albrecht Mehl schrieb:

> Zukünftig wird folgende Aufgabe häufiger auf mich zukommen:
>
> 1. Nimm den Inhalt einer bestimmten Zelle.
> 2, Addiere 1 dazu.
> 3. Speichere den um eins erhöhten Wert an die ursprüngliche Stelle.
>
> Da dies, wie geschrieben, oft vorkommen wird, will ich dafür ein Makro
> basteln.
>
> Mangels Erfahrung: wie führt man diese Aufgabe am einfachsten und
> elegantesten aus?

Vielleicht im Prinzip so, ohne weitere Fehlerroutinen:

Sub IncrementActiveCell()
oActiveCell = ThisComponent.CurrentSelection
oActiveCell.Value = oActiveCell.Value + 1
End Sub

Und dann einer Tastenkombination zuweisen.

Schöne Grüße
Volker

Volker Lenhardt

unread,
Oct 30, 2008, 7:02:51 AM10/30/08
to
Volker Lenhardt schrieb:
> Albrecht Mehl schrieb:

>> 1. Nimm den Inhalt einer bestimmten Zelle.
>> 2, Addiere 1 dazu.
>> 3. Speichere den um eins erhöhten Wert an die ursprüngliche Stelle.

Inklusive einfacher Kontrolle, ob eine einzelne Zelle ausgewählt ist und
ob die Zelle numerischen Inhalt hat:

Sub IncrementActiveCell()
oActiveCell = ThisComponent.CurrentSelection

if oActiveCell.supportsService("com.sun.star.sheet.SheetCell") then
if oActiveCell.getType() = com.sun.star.table.CellContentType.VALUE
then _


oActiveCell.Value = oActiveCell.Value + 1

end if
End Sub

Bitte auf falschen Zeilenumbruch achten: "if ... then _" muss in einer
Zeile stehen.

Schöne Grüße
Volker

Albrecht Mehl

unread,
Nov 1, 2008, 2:35:29 AM11/1/08
to

Albrecht Mehl schrieb:


> Zukünftig wird folgende Aufgabe häufiger auf mich zukommen:
>
> 1. Nimm den Inhalt einer bestimmten Zelle.
> 2, Addiere 1 dazu.
> 3. Speichere den um eins erhöhten Wert an die ursprüngliche Stelle.
>
> Da dies, wie geschrieben, oft vorkommen wird, will ich dafür ein Makro
> basteln.
>
> Mangels Erfahrung: wie führt man diese Aufgabe am einfachsten und
> elegantesten aus?
>
> Ich bitte um Nachsicht für diese Frage, für die einige Experten hier
> wohl nur ein müdes Lächeln übrig haben.

Für die Antworten bedanke ich mich. Weil es mir einfacher erscheint,
entschied ich mich für die Lösung von Diel. Da ich aber auch noch etwas
lernen will: wie hätte ich mit der anderen Lösung umgehen können, sprich
wohin schreibt man den vorgeschlagenen Code?

Siegfried Höfner

unread,
Nov 1, 2008, 8:39:33 AM11/1/08
to

"Albrecht Mehl" <AlbrechtMe...@iesy.net> schrieb im Newsbeitrag news:6n2blhF...@mid.individual.net...

>
>
> Albrecht Mehl schrieb:
>> Zukünftig wird folgende Aufgabe häufiger auf mich zukommen:
>>
>> 1. Nimm den Inhalt einer bestimmten Zelle.
>> 2, Addiere 1 dazu.
>> 3. Speichere den um eins erhöhten Wert an die ursprüngliche Stelle.
[...]

> Für die Antworten bedanke ich mich. Weil es mir einfacher erscheint,
> entschied ich mich für die Lösung von Diel. Da ich aber auch noch etwas

Mir würde es einfacher erscheinen, die um 1 erhöhte Zahl einzugeben.
Die Lösung mit dem Zwischenspeicher macht doch nur Sinn, wenn man mehrere
Zellen gleichzeitig bearbeiten möchte.

Zusatzfrage : wo / zu welchem Zweck braucht man so etwas (Beispiel) ?
Läßt sich das wirklich nicht durch Berechnung erzeugen ?

Gruß Siegfried

Albrecht Mehl

unread,
Nov 3, 2008, 1:54:13 AM11/3/08
to

Siegfried Höfner schrieb:


> "Albrecht Mehl" <AlbrechtMe...@iesy.net> schrieb im Newsbeitrag news:6n2blhF...@mid.individual.net...
>>
>>
>> Albrecht Mehl schrieb:
>>> Zukünftig wird folgende Aufgabe häufiger auf mich zukommen:
>>>
>>> 1. Nimm den Inhalt einer bestimmten Zelle.
>>> 2, Addiere 1 dazu.
>>> 3. Speichere den um eins erhöhten Wert an die ursprüngliche Stelle.
> [...]
>> Für die Antworten bedanke ich mich. Weil es mir einfacher erscheint,
>> entschied ich mich für die Lösung von Diel. Da ich aber auch noch etwas
>
> Mir würde es einfacher erscheinen, die um 1 erhöhte Zahl einzugeben.

So viel Zeit habe ich nicht. Dazu müßte man die betreffende Zelle
markieren, die neue Zahl eingeben und dann noch 'abschicken'. Zähl man
die Anschläge, die da anfallen, zusammen, ist das - zumindest von mir -
abgelehnt.

> Die Lösung mit dem Zwischenspeicher macht doch nur Sinn, wenn man mehrere
> Zellen gleichzeitig bearbeiten möchte.

Nein, siehe unten.

> Zusatzfrage : wo / zu welchem Zweck braucht man so etwas (Beispiel) ?
> Läßt sich das wirklich nicht durch Berechnung erzeugen ?

Wir fangen gerade an, ein Häuschen zu bauen. Da fallen dann Belege, die
jeweils aktuell in einer Kostenübersicht gebucht werden wollen. Jeder
Belegt bekommt eine Nummer, beim nächsten Mal die um eins erhöhte.
Bevor ich die Belegnummer auf den Beleg male, muß ich die Nummer wissen.
Dazu müßte ich die früher gebuchen Belege hervorkramen oder aber in der
mehrseitigen Tabelle durchsehen, welches die letzte Nummer war. Für
beides bin ich zu faul. Die Eingabe eines Beleges wird durch ein Makro
abgeschlossen, weil auch die zeitliche Entwicklung der Gesamtkosten in
einer zweiten Tabelle festgehalten und in einer dritten Tabelle
graphisch dargestellt werden soll. Also möchte ich zum Abschluß des
Makros einfach in einer Zelle am Anfang der Tabelle - fester(!) Platz -
die Anzahl um eins erhöhen lassen.

Siegfried Höfner

unread,
Nov 3, 2008, 3:58:06 AM11/3/08
to

"Albrecht Mehl" <AlbrechtMe...@iesy.net> schrieb im Newsbeitrag news:6n7lglF...@mid.individual.net...
>
[...]

>>
>> Mir würde es einfacher erscheinen, die um 1 erhöhte Zahl einzugeben.
>
> So viel Zeit habe ich nicht. Dazu müßte man die betreffende Zelle

Ich habe im Moment auch nicht die Zeit, sonst würde ich dir die Gegenrechnung
aufmachen. Jeder soll so machen wie er will.

> markieren, die neue Zahl eingeben und dann noch 'abschicken'. Zähl man
> die Anschläge, die da anfallen, zusammen, ist das - zumindest von mir -
> abgelehnt.
>
>> Die Lösung mit dem Zwischenspeicher macht doch nur Sinn, wenn man mehrere
>> Zellen gleichzeitig bearbeiten möchte.
>
> Nein, siehe unten.
>
>> Zusatzfrage : wo / zu welchem Zweck braucht man so etwas (Beispiel) ?
>> Läßt sich das wirklich nicht durch Berechnung erzeugen ?
>
> Wir fangen gerade an, ein Häuschen zu bauen. Da fallen dann Belege, die
> jeweils aktuell in einer Kostenübersicht gebucht werden wollen. Jeder
> Belegt bekommt eine Nummer, beim nächsten Mal die um eins erhöhte.
> Bevor ich die Belegnummer auf den Beleg male, muß ich die Nummer wissen.
> Dazu müßte ich die früher gebuchen Belege hervorkramen oder aber in der
> mehrseitigen Tabelle durchsehen, welches die letzte Nummer war. Für
> beides bin ich zu faul. Die Eingabe eines Beleges wird durch ein Makro
> abgeschlossen, weil auch die zeitliche Entwicklung der Gesamtkosten in
> einer zweiten Tabelle festgehalten und in einer dritten Tabelle
> graphisch dargestellt werden soll. Also möchte ich zum Abschluß des
> Makros einfach in einer Zelle am Anfang der Tabelle - fester(!) Platz -
> die Anzahl um eins erhöhen lassen.

Ich gehe davon aus, daß die Belegnummern innerhalb "eines Erfassungsbereichs"
immer in der gleichen Spalte stehen: also bei Bereich1 in Spalte "D", bei
Bereich2 in Spalte "E" oder immer in der gleichen Spalte.
Dann schreibe ich an den "- fester(!) Platz -" als Beispiel die Formel:
=MAX(D5:D50;E100:E120)+1 und habe immer die nächste freie Belegnummer.

Gruß Siegfried


Albrecht Mehl

unread,
Nov 3, 2008, 4:15:50 AM11/3/08
to

Siegfried Höfner schrieb:


> Ich gehe davon aus, daß die Belegnummern innerhalb "eines Erfassungsbereichs"
> immer in der gleichen Spalte stehen: also bei Bereich1 in Spalte "D", bei
> Bereich2 in Spalte "E" oder immer in der gleichen Spalte.
> Dann schreibe ich an den "- fester(!) Platz -" als Beispiel die Formel:
> =MAX(D5:D50;E100:E120)+1 und habe immer die nächste freie Belegnummer.

Das ist das Ei des Kolumbus! Vielen Dank für den Hinweis auf diese
Möglichkeit.

Josef Latt

unread,
Nov 3, 2008, 4:19:23 AM11/3/08
to
Hi,

Albrecht Mehl schrieb:

>
> Wir fangen gerade an, ein Häuschen zu bauen. Da fallen dann Belege, die
> jeweils aktuell in einer Kostenübersicht gebucht werden wollen. Jeder
> Belegt bekommt eine Nummer, beim nächsten Mal die um eins erhöhte.
> Bevor ich die Belegnummer auf den Beleg male, muß ich die Nummer wissen.
> Dazu müßte ich die früher gebuchen Belege hervorkramen oder aber in der
> mehrseitigen Tabelle durchsehen, welches die letzte Nummer war. Für
> beides bin ich zu faul. Die Eingabe eines Beleges wird durch ein Makro
> abgeschlossen, weil auch die zeitliche Entwicklung der Gesamtkosten in
> einer zweiten Tabelle festgehalten und in einer dritten Tabelle
> graphisch dargestellt werden soll. Also möchte ich zum Abschluß des
> Makros einfach in einer Zelle am Anfang der Tabelle - fester(!) Platz -
> die Anzahl um eins erhöhen lassen.

Vorschlag:

In die erste Zeile der Spalte Belegnummer trägst Du eine 1 ein.
In die zweite Zeile folgende Formel: =WENN(B3<>"";A2+1;"").
In A2 steht z.B. das Belegdatum.
Kopiere die Formel in der Spalte Belegnummer, soweit erforderlich nach
unten.

Am Tabellenanfang trägst Du in eine getrennte und fixierte Zeile die
Formel =MAX(A1:Ax) ein, wobei x dem Wert der letzten kopierten Zeile der
Spalte Belegnummer entspricht.

So hast Du am Tabellenanfang immer die höchste Belegnummer parat.
Bei Bedarf kann der Bereich erweitert werden, Formal MAX muß dann
angepaßt werden.

Gruß
Josef

Volker Lenhardt

unread,
Nov 11, 2008, 1:13:58 PM11/11/08
to
Albrecht Mehl schrieb:
>
> ... Die Eingabe eines Beleges wird durch ein Makro

> abgeschlossen, weil auch die zeitliche Entwicklung der Gesamtkosten in
> einer zweiten Tabelle festgehalten und in einer dritten Tabelle
> graphisch dargestellt werden soll. Also möchte ich zum Abschluß des
> Makros einfach in einer Zelle am Anfang der Tabelle - fester(!) Platz -
> die Anzahl um eins erhöhen lassen.
>

Da bin ich wieder.

Wenn sowieso ein Makro eingesetzt wird, dann bietet es sich doch an,
auch das Hochzählen der Belege durch eben das Makro zu erledigen.

Eine feste Zelle enthält, wenn ich das richtig verstehe, die Nummer des
letzten Belegs.

Am Anfang des Makros steht wahrscheinlich so etwas wie

oDoc = ThisComponent

Im Makro liest man erst den Wert des Zählers aus und inkrementiert ihn
in die Variable iNeueBelegNr:

oBelegZaehlerZelle = _
oDoc.Sheets("ZaehlerTabelle").getCellByPosition(SpNr, ZlNr)
iNeueBelegNr = oBelegZaehlerZelle.Value + 1

Dann verwendet man diesen Wert irgendwie, vielleicht als Wert einer Zelle:

oBelegNrZelle = _
oDoc.Sheets("NeuerBelegTabelle").getCellByPosition(SpNr, ZlNr)
oBelegNrZelle.Value = iNeueBelegNr

Zum Schluss wird die Nummer im Belegzähler gespeichert:

oBelegZaehlerZelle.Value = iNeueBelegNr

Erläuterungen:

Spalten- und Zeilennummern starten immer bei 0. Zelle A2 wird also durch
...getCellByPosition((0, 1) angesprochen.

Man kann wie bei den Tabellenblättern auch bei den Zellen Namen
verwenden: ...getCellByName("BelegZaehler"). Dann muss man das Makro
nicht verändern, wenn der Zähler in eine andere Zelle soll, aber den
Namen beibehält.

Umgekehrt können auch die Tabellenblätter numerisch angesprochen werden:
oDoc.Sheets(1) ist also "Tabelle2", weil auch da bei 0 gestartet wird.

Namen stehen immer in Anführungszeichen.

Auch wenn das Makro aufgezeichnet wird, können diese Zeilen in das
fertige Makro eingefügt werden - mit Rücksicht auf die automatisch
vergebenen Variablennamen, die man allerdings auch im Nachhinein
anpassen kann.

Schöne Grüße
Volker

Ralf Eichler

unread,
Jul 2, 2009, 3:57:32 PM7/2/09
to
Am 03.11.2008 07:54 hub Albrecht Mehl aber zu reden an und sprach:

> Wir fangen gerade an, ein Hï¿œuschen zu bauen. Da fallen dann Belege, die
> jeweils aktuell in einer Kostenï¿œbersicht gebucht werden wollen. Jeder
> Belegt bekommt eine Nummer, beim nï¿œchsten Mal die um eins erhï¿œhte.
> Bevor ich die Belegnummer auf den Beleg male, muᅵ ich die Nummer wissen.
> Dazu mᅵᅵte ich die frᅵher gebuchen Belege hervorkramen oder aber in der
> mehrseitigen Tabelle durchsehen, welches die letzte Nummer war. Fï¿œr


> beides bin ich zu faul. Die Eingabe eines Beleges wird durch ein Makro
> abgeschlossen, weil auch die zeitliche Entwicklung der Gesamtkosten in
> einer zweiten Tabelle festgehalten und in einer dritten Tabelle

> graphisch dargestellt werden soll. Also mᅵchte ich zum Abschluᅵ des


> Makros einfach in einer Zelle am Anfang der Tabelle - fester(!) Platz -

> die Anzahl um eins erhï¿œhen lassen.


Ich wï¿œrde das so machen: du hast doch in deiner Belege-Tabelle bestimmt
die Nummern der Belege mit drin. Nimm an deine Belegnummerierung steht
in A3 bis A99999.Dann kï¿œnntest du doch an deiner "festen Stelle" am
Anfang der Tabelle die Formel =MAX(A3:A99999)+1

Damit erhï¿œltst du in dieser festen Zelle automagisch die Nummer des
nï¿œchsten Beleges. Voraussetzung: jeder Beleg muss nach Nummernvergabe
dann auch sofort in die Tabelle eingetragen werden.

HTH

R/\LF

0 new messages