Unterste Zelle mit Inhalt in einem Bereich finden

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von snailmed »

Hallo liebe Forum-Mitglieder,

ich bin gerade dabei, ein Dokument für Medikamentenbestand zu erstellen.
BTM_Doku.ods
(22.57 KiB) 80-mal heruntergeladen
Ich habe mit der WENN-Funktion schon einiges hinbekommen, was die Eingabe für unsere MFAs erleichtert. Nun stehen aber noch ein paar ungelöste Probleme an:

1) Zur besseren Übersichtlichkeit möchte ich jetzt gerne am unteren Rand des Dokuments das Feld für den aktuellen Bestand gefüllt haben (E64). Der aktuelle Bestand entspricht immer der letzten ausgefüllten Zeile.
Mit welcher Funktion kann ich den Bereich E30 bis E62 durchsuchen und die unterste beschriebene Zelle auswählen?

2) Gibt es die Möglichkeit, dass Zellen automatisch geschützt werden, sobald sie ausgefüllt wurden? Das würde ein versehentliches Löschen vermeiden.

3) Schwieriger Wunsch...
Am Monatsende müssten
- die Zellen A30 bis A62 gelöscht werden
- der Inhalt von E64 (aktueller Bestand) in E28 (Übertrag) übernommen werden
- der Inhalt von F4 (laufende Nr.) um 1 erhöht werden.
Und das alles am liebsten mit einem Klick und für alle Reiter (werden später ca. 25 Pat. sein).

Über jegliche Hilfe würde ich mich sehr freuen!

Viele Grüße
snailmed
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von Stephan »

3) Schwieriger Wunsch...
Am Monatsende müssten
- die Zellen A30 bis A62 gelöscht werden
- der Inhalt von E64 (aktueller Bestand) in E28 (Übertrag) übernommen werden
- der Inhalt von F4 (laufende Nr.) um 1 erhöht werden.
Und das alles am liebsten mit einem Klick und für alle Reiter (werden später ca. 25 Pat. sein).
dazu genügt folgendes Makro:

Code: Alles auswählen

Sub bereinigen()
	tc = ThisComponent
	For i = 0 To tc.Sheets.Count()-1
		With tc.Sheets(i)
			For j = 29 To 61 'A30:A62
				.getCellByPosition(0,j).FormulaLocal = ""
			Next j
			.getCellRangeByName("E28").Value = .getCellRangeByName("E64").Value
			.getCellRangeByName("F4").Value = .getCellRangeByName("F4").Value+1
		End With
	Next i 
End Sub

Gruß
Stephan
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von lorbass »

snailmed hat geschrieben: Di, 14.02.2017 17:50 Mit welcher Funktion kann ich den Bereich E30 bis E62 durchsuchen und die unterste beschriebene Zelle auswählen?

Code: Alles auswählen

=INDEX(E30:E62;MAX(ISTZAHL(E30:E62)*ZEILE(E30:E62))-29)
oder

Code: Alles auswählen

=INDEX(E1:E62;MAX(ISTZAHL(E30:E62)*ZEILE(E30:E62)))
snailmed hat geschrieben: Di, 14.02.2017 17:50 2) Gibt es die Möglichkeit, dass Zellen automatisch geschützt werden, sobald sie ausgefüllt wurden?
AFAIK: Nein.
snailmed hat geschrieben: Di, 14.02.2017 17:50 Das würde ein versehentliches Löschen vermeiden.
Aber auch das Korrigieren von Fehlern bei der Eingabe der Daten.

Gruß
lorbass
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von F3K Total »

lorbass hat geschrieben: Di, 14.02.2017 18:56AFAIK: Nein.
Sorry, doch siehe Anlage
Gruß R
Dateianhänge
BTM_Doku.ods
(24.36 KiB) 82-mal heruntergeladen
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von snailmed »

Ich verstehe das Prinzip! Vielen Dank für den Makro-Code. Ich habe gleich noch ein bisschen daran rumgebastelt, weil ich natürlich vergessen hatte, dass Inhalte von Spalte C und D auch gelöscht werden müssen - und natürlich erst nach (!) dem übertragen des Bestandes... Es funktioniert !!

Da ich bislang noch nie mit Makros gearbeitet habe, noch die Frage: Kann man eine Zelle so verknüpfen, dass man auf sie klickt und dann das Makro ausgeführt wird?

Vielen Dank auch für die anderen Lösungen, werde es gleich mal ausprobieren...
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von Stephan »

Da ich bislang noch nie mit Makros gearbeitet habe, noch die Frage: Kann man eine Zelle so verknüpfen, dass man auf sie klickt und dann das Makro ausgeführt wird?
Ist nicht doch eine Schaltfläche besser? Diese kann auch direkt in einem Tabellenblatt sein ohne das sie gedruckt werden muss:

-Ansicht-Symbolleisten-Formularsteueelemente
-in der jetzt sichtbaren Symbolleiste den Entwurfsmodus einschalten ('Geo-Dreieck')
- nun in der SYmbolleiste die Schaltfläche wählen und im Tabellenblatt eine zeichnen
-Kontextmenü der Schaltfläche und Kontrollfeld... klicken
-im Dialog registzer "Ereignisse"
-dort für "Aktion ausführen" das Makro zuweisen
-evtl. zum REgister "Allgemein" wechseln und dort Druckbar-Nein einstellen
-bestätigen das Dialog wieder zu
-Entwurfsmodus verlassen


Gruß
Stephan
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von snailmed »

Hallo f3K,

wie hast Du das gemacht??

Das ist klasse!
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von lorbass »

F3K Total hat geschrieben: Di, 14.02.2017 19:10 Sorry, doch siehe Anlage
Stimmt. Hätte ich eigentlich auch wissen müssen. Danke.
Meine Bedenken wegen der mit der Verriegelung einhergehenden Probleme bei Korrekturen bleiben allerdings unberührt. :roll:

Gruß
lorbass
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von snailmed »

Hallo Stephan,

ich scheitere an "im Tabellenblatt eine zeichnen", das "Kontrollfeld" in der Schaltfläche kann ich daher nicht anwählen.

Kannst Du mir das bitte noch erklären, was ich da zu tun habe?

Viele Grüße
snailmed
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von lorbass »

snailmed hat geschrieben: Di, 14.02.2017 19:30 wie hast Du das gemacht??
Den Zellen in den Spalten A – E mit Bedingter Formatierung eine der beiden Formatvorlagen nichtgesperrt bzw. gesperrt zuweisen,
Tabellenblatt sperren: Extras → Dokument schützen → [✓] Tabelle….

Gruß
lorbass
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von snailmed »

Hallo lorbass,

macht Sinn und klappt ja auch in der Tabelle, die hier zum Download stand.
Komischerweise hab ich es in meinem Original ebenfalls versucht, und es klappt nicht... Es sperrt einfach nicht die Zellen. Hast Du ne Ahnung, woran das liegen könnte?

VG
snailmed
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von Stephan »

ich scheitere an "im Tabellenblatt eine zeichnen", das "Kontrollfeld"
in der benannten Symbolleiste auf das Symbol für Schaltfläche klicken, dabei wird der Mauspfeil zum Kreuz, nun mit diesem Kreuz auf dem Tabellenblatt die Schaltfläche aufziehen.


Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von F3K Total »

snailmed hat geschrieben: Di, 14.02.2017 20:24 Hallo lorbass, macht Sinn und klappt ja auch in der Tabelle, die hier zum Download stand.
Komischerweise hab ich es in meinem Original ebenfalls versucht, und es klappt nicht... Es sperrt einfach nicht die Zellen. Hast Du ne Ahnung, woran das liegen könnte?
Hallo,
es müssen mehrere Bedingungen erfüllt werden:
  • alle Zellen des zu beschreibenden Bereiches müssen über Menü Format/Zellen/Reiter Zellschutz entsperrt werden
  • es müssen zwei Formatvorlagen (F11) angelegt werden, ich habe sie gesperrt und nichtgesperrt genannt, wobei diese sich auch auf dem Reiter Zellschutz entsprechend unterscheiden.
  • Die zu sperrenden Zellen, A30 bis E62 müssen mit der bedingten Formatierung, ausgehend von der Zelle A30, wie folgt formatiert werden:

    Code: Alles auswählen

    Formel ist: WENN(UND($A30<>"";ODER($C30<>"";$D30<>""));VORLAGE("gesperrt");VORLAGE("nichtgesperrt"))
  • Das Tabellenblatt muss dann über Menü Extras/Dokument schützen/Tabelle... geschützt werden
Dann sollte es klappen.
lorbass hat geschrieben:Meine Bedenken wegen der mit der Verriegelung einhergehenden Probleme bei Korrekturen bleiben allerdings unberührt. :roll:
Vielleicht geht es mit der angehängten Version besser, hier habe ich eine zusätzliche Sperrspalte zugefügt, in die man, wenn die Zeile gesperrt werden soll, einfach ein g eintippt.
Die Bedingte Formatierung lautet dann:

Code: Alles auswählen

Formel ist: WENN(UND($A30<>"";ODER($C30<>"";$D30<>"");$G30="g");VORLAGE("gesperrt");VORLAGE("nichtgesperrt"))
Gruß R
Dateianhänge
BTM_Doku.ods
(24.53 KiB) 142-mal heruntergeladen
paljass
******
Beiträge: 792
Registriert: Do, 25.10.2012 07:25

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von paljass »

Hi,
"=INDEX(E24:E60;MAX(ISTZAHL(E24:E60)*ZEILE(E24:E60))-23)" führt immer zu dem Fehler "Err. 502".
Es handelt sich um eine Matrixformel, d.h. du musst die Eingabe mit Strg-Umschalt-Enter abschließen.

Gruß
paljass
EDV ist wie U-Boot fahren - machst du ein Fenster auf, fangen die Probleme an.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von Stephan »

- Ins Makro müsste noch eingebaut werden, dass die entsprechenden Zellen vor dem löschen wieder auf "entsperrt" gesetzt werden, sonst können sie nicht zurück gesetzt werden.
Welchen Befehl brauche ich da im Makro-Code?
eigentlich müssen doch nur die Zellinhalte geleert werden und die bedingte Formatierung regelt alles, kann "F3K Total" bitte die Richtigkeit dieses Vorgehens bestätigen?

Wenn meine Annahme stimmt, sollte folgende Codeergänzung für das Makro die Arbeit tun:

Code: Alles auswählen

		With tc.Sheets(i)
			...
			For j = 29 To 61 'C30:E62
				.getCellByPosition(2,j).FormulaLocal = ""
				.getCellByPosition(3,j).FormulaLocal = ""
				.getCellByPosition(4,j).FormulaLocal = ""
			Next j
		End With
Gruß
Stephan
Antworten