Michael Ottenbruch
2020-06-06 11:22:08 UTC
Hallo, Leute!
Ich arbeite in OpenOffice Calc mit einem selbst geschriebenen
Haushaltsbuch (ich weiß: "Rad neu erfinden usw."). Es tut ziemlich genau
das was ich will. Neue Daten füge ich am Ende an und sortiere sie dann
per Makro bsplsw. nach dem Datum in die Tabelle ein. Das funktioniert
auch prächtig, obwohl ich von Open Office Basic bzw. Makros nicht viel
verstehe. Allerdings ist nach dem Sortieren die aktive Zelle die erste
des Sortierbereichs, also unmittelbar unter dem Tabellenkopf.
Ich würde gerne in die letzte (gemeint: unterste) Zelle einer bestimmten
sortierten Spalte springen, die ein Datum kleiner oder gleich dem
aktuellen Tagesdatum enthält. Wahrscheinlich stehe ich einfach nur auf
dem Schlauch, aber finde keinen Ansatzpunkt für die Umsetzung in ein
Makro.
Bisher habe ich Folgendes zuwege gebracht:
Ich habe in Feld I1 die Formel "=HEUTE()" eingegeben. Das ergibt heute
"06.06.20" In Feld K1 habe ich die Formel "=VERGLEICH(I1;B5:B518)"
eingegeben. Das sollte laut Hilfe die Zellen B5 bis B518 (also Spalte B)
nach diesem Wert durchsuchen ("Liefert die relative Position eines
Elements in einer Matrix, das mit einem angegebenen Wert übereinstimmt.
Die Funktion liefert die Position des in "Suchmatrix" gefundenen Werts
in Form einer Zahl. [...] Sobald dieser Wert gefunden ist, wird die
Nummer der Zeile, in der der Wert gefunden wurde, zurückgegeben. Wenn
beim Suchen in der Spalte ein höherer Wert gefunden wird, wird die
Nummer der vorhergehenden Zeile zurückgegeben.") In diesem Fall enthält
Zelle B369 den Wert "05.06.20", B370 den Wert "08.06.20". Die Funktion
in K1 gibt den Wert "365" aus, was durchaus der "relative[n] Postion
[des] Feldes in [der] Matrix" entspricht, sofern das niedrigste Feld der
Matrix als "1" gezählt wird. Einigermaßen folgerichtig ergibt die
Eingabe der Funktion "=VERSCHIEBUNG(B5;K1-1;0)" in Zelle K2 die Ausgabe
"05.06.20" (hier scheint die Zählung des Offsets mit "0" zu beginnen,
weswegen wohl 1 abgezogen werden muß).
Zusammenfassen läßt sich das Ganze zu einer einzigen Formel:
"=VERSCHIEBUNG(B5;VERGLEICH(HEUTE();B5:B518)-1;0)", die dann als
Ergebnis wiederum "05.06.20" auswirft, ohne andere Bezüge als die auf
die durchsuchte Spalte zu enthalten.
Mit welchem Makro-Befehl kann ich aber nun in diese Zelle, die hier das
Argument der Funktion VERSCHIEBUNG ist, springen?
Zusatzfrage: Verändert dieser Makrobefehl automatisch seine Parameter
(also den durchsuchten Bereich in Spalte B, hier "B5:B518"), wenn ich
Zeilen zwischen Zeile 5 und Zeile 518 einfüge? Die Makros die ich bisher
benutze, springen zum letzten Datenfeld (beim Aufzeichnen des Makros
habe ich die Tastenkombination <STRG>-<ENDE> verwendet), markieren von
dort aus einen Bereich (Tastenkombination <SHIFT>-<STRG>-<POS1> und 4 x
<SHIFT>-<CURSOR-DOWN>) und sortieren diesen dann. Das funktioniert
automatisch weiter bei Vergrößerung des Datenbereiches.
Falls nein: Gibt es eine Funktion, die höchste belegte Zelle in einer
Spalte ausgibt und die ich in obiger Formel also anstatt "B518" eingeben
könnte?
TIA
Ich arbeite in OpenOffice Calc mit einem selbst geschriebenen
Haushaltsbuch (ich weiß: "Rad neu erfinden usw."). Es tut ziemlich genau
das was ich will. Neue Daten füge ich am Ende an und sortiere sie dann
per Makro bsplsw. nach dem Datum in die Tabelle ein. Das funktioniert
auch prächtig, obwohl ich von Open Office Basic bzw. Makros nicht viel
verstehe. Allerdings ist nach dem Sortieren die aktive Zelle die erste
des Sortierbereichs, also unmittelbar unter dem Tabellenkopf.
Ich würde gerne in die letzte (gemeint: unterste) Zelle einer bestimmten
sortierten Spalte springen, die ein Datum kleiner oder gleich dem
aktuellen Tagesdatum enthält. Wahrscheinlich stehe ich einfach nur auf
dem Schlauch, aber finde keinen Ansatzpunkt für die Umsetzung in ein
Makro.
Bisher habe ich Folgendes zuwege gebracht:
Ich habe in Feld I1 die Formel "=HEUTE()" eingegeben. Das ergibt heute
"06.06.20" In Feld K1 habe ich die Formel "=VERGLEICH(I1;B5:B518)"
eingegeben. Das sollte laut Hilfe die Zellen B5 bis B518 (also Spalte B)
nach diesem Wert durchsuchen ("Liefert die relative Position eines
Elements in einer Matrix, das mit einem angegebenen Wert übereinstimmt.
Die Funktion liefert die Position des in "Suchmatrix" gefundenen Werts
in Form einer Zahl. [...] Sobald dieser Wert gefunden ist, wird die
Nummer der Zeile, in der der Wert gefunden wurde, zurückgegeben. Wenn
beim Suchen in der Spalte ein höherer Wert gefunden wird, wird die
Nummer der vorhergehenden Zeile zurückgegeben.") In diesem Fall enthält
Zelle B369 den Wert "05.06.20", B370 den Wert "08.06.20". Die Funktion
in K1 gibt den Wert "365" aus, was durchaus der "relative[n] Postion
[des] Feldes in [der] Matrix" entspricht, sofern das niedrigste Feld der
Matrix als "1" gezählt wird. Einigermaßen folgerichtig ergibt die
Eingabe der Funktion "=VERSCHIEBUNG(B5;K1-1;0)" in Zelle K2 die Ausgabe
"05.06.20" (hier scheint die Zählung des Offsets mit "0" zu beginnen,
weswegen wohl 1 abgezogen werden muß).
Zusammenfassen läßt sich das Ganze zu einer einzigen Formel:
"=VERSCHIEBUNG(B5;VERGLEICH(HEUTE();B5:B518)-1;0)", die dann als
Ergebnis wiederum "05.06.20" auswirft, ohne andere Bezüge als die auf
die durchsuchte Spalte zu enthalten.
Mit welchem Makro-Befehl kann ich aber nun in diese Zelle, die hier das
Argument der Funktion VERSCHIEBUNG ist, springen?
Zusatzfrage: Verändert dieser Makrobefehl automatisch seine Parameter
(also den durchsuchten Bereich in Spalte B, hier "B5:B518"), wenn ich
Zeilen zwischen Zeile 5 und Zeile 518 einfüge? Die Makros die ich bisher
benutze, springen zum letzten Datenfeld (beim Aufzeichnen des Makros
habe ich die Tastenkombination <STRG>-<ENDE> verwendet), markieren von
dort aus einen Bereich (Tastenkombination <SHIFT>-<STRG>-<POS1> und 4 x
<SHIFT>-<CURSOR-DOWN>) und sortieren diesen dann. Das funktioniert
automatisch weiter bei Vergrößerung des Datenbereiches.
Falls nein: Gibt es eine Funktion, die höchste belegte Zelle in einer
Spalte ausgibt und die ich in obiger Formel also anstatt "B518" eingeben
könnte?
TIA
--
...und tschuess!
Michael
E-mail: ***@sailor.ping.de
...und tschuess!
Michael
E-mail: ***@sailor.ping.de