Bestimmte Strings kopieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Benno1234
Beiträge: 4
Registriert: Do, 03.04.2025 21:08

Bestimmte Strings kopieren

Beitrag von Benno1234 »

Moin zusammen,
ich bin etwas am verzweifeln mit Open Office Calc :)
Ich habe in Tabellenblatt "Input" eine Spalte Datum, eine mit Namen, eine ob "Anwesend" und eine mit dem Grund.
In Tabellenblatt "Person" würde ich gerne in "Input" schauen wenn folgendes zutrifft: Name MA und Tag und nicht Anwesend. Wenn dies der Fall ist soll dann aus der Spalte daneben der String mit dem Grund angezeigt werden. Wenn nicht dann soll "Anwesend" angezeigt werden.

Das ganze soll mit einer Funktion realisiert werden, so dass kein Makro freigegeben werden muss.
Ich hatte es in Excel mal mit sverweis realisiert aber dies geht irgendwie nicht bei OO Calc und die Vorschläge aus dem Internet (Foren) passen nicht ganz und den üblichen Chatbots sind so offensichtlicher bullshit, dass ich mich langsam für sehr dumm halte. :D

Vielleicht kann mir hier jemand weiter helfen?
Vielen Dank im Voraus!
echo
*******
Beiträge: 1035
Registriert: Fr, 14.11.2008 15:27
Wohnort: BRA - Nds

Re: Bestimmte Strings kopieren

Beitrag von echo »

Hallo
ich würde eine Hilfsspalte anlegen in der alle relevanten Zeilen mit der Funktion zeile() markiert werden.
Also wenn >> Name MA und Tag und nicht Anwesend << gleich WAHR dann zeile() sonnst "" (Nichts)
Alle relevanten Zeilen lassen sich dann per Funktion Index(Vergleich()) anzeigen.

Wenn du uns hier eine (anonyme) (calc) - Datei mit einigen Daten und sowie gewünschten Ergebnis zur Verfügung stellst,
kann man das recht leicht einbauen

Gruß Holger
Benno1234
Beiträge: 4
Registriert: Do, 03.04.2025 21:08

Re: Bestimmte Strings kopieren

Beitrag von Benno1234 »

Moin,
erstmal vielen Dank für die schnelle Antwort!
Eine extra Spalte würde ich ungern einfügen, da in das Tabellenblatt "Input" generisch aus einer CSV hereinkopiert wird und ich dies möglichst einfach halten wollen würde.
Auf deine Empfehlung hin habe ich mal eine Pseudonymisierte Datei angehägt um etwas klarer zu werden. :)
20250404_Anonymisiert.ods
(49.06 KiB) 301-mal heruntergeladen
Es ist mir dabei aufgefallen, dass ein paar konkrete Angaben aus meinem vorherigen Post nicht 100%ig korrekt waren. Also den Ursprünglichen post nicht ganz ernst nehmen. :)

Diese ?Stringübertragung? soll in den Monatsblättern in Spalte D "Typ" stattfinden. Dazu soll dem jeweiligen Datum entsprechend im Tabellenblatt "Input" nach gesucht werden. Dort auch nur die Eintragungen des entsprechenden Mitarbeiters berücksichtigt werden.
Wenn in "Input" Spalte C "Typ" beim entsprechenden Datum und Namen was anderes als "Arbeitszeit" steht soll rechts davon der Inhalt aus der Zelle (Spalte D) angezeigt werden.
Beispiel: Lukas Podolski hat am 19.3 Urlaub eingetragen dann sollte in Tabellenblatt "März" in Zelle D24 der String von "Input" aus der entsprechenden Zelle "Urlaub (bezahlt)" stehen bzw. den aktuellen String "Arbeitszeit" ersetzen.

Für die eigentliche Stundenberechnung habe ich dies alles funktionierend hinbekommen. Siehe dazu in den Monatsblättern Spalte G. Nur mit Strings kriege ich das irgendwie nicht hin.

Nochmals vielen Dank für deine Zeit!
mfg
mikeleb
*******
Beiträge: 1420
Registriert: Fr, 09.12.2011 16:50

Re: Bestimmte Strings kopieren

Beitrag von mikeleb »

Hallo,
für die Zelle D24:

Code: Alles auswählen

=WENN(INDEX(Input.B:B;SUMMENPRODUKT(ZEILE(Input.A:A);Input.A:A=$G$2;B24>=Input.D:D;B24<=Input.E:E))<>"Arbeitszeit";INDEX(Input.C:C;SUMMENPRODUKT(ZEILE(Input.A:A);Input.A:A=$G$2;B24>=Input.D:D;B24<=Input.E:E));"Arbeitszeit")
Gruß,
mikeleb
Benno1234
Beiträge: 4
Registriert: Do, 03.04.2025 21:08

Re: Bestimmte Strings kopieren

Beitrag von Benno1234 »

Moin,
danke für die schnelle Antwort!
Dein Beispiel passt schonmal ganz gut. Ich musste es nur einmal auf die Datei (Die Spalten Angaben) anpassen, da es sonst so nicht bei OpenOffice funktioniert hätte.
Jetzt funktioniert es ganz gut bis auf den kuriosen Effekt, dass immer beim 6. des Monats jetzt immer der String "Krankheit" auftaucht und ich mir beim besten Willen nicht erklären kann wo der den überhaubt her hat. :D
Das tritt bei jeden Monat auf, bis auf März. Ich vermute mal weil er da sonst keine Einträge in "Input" findet und dann es zu komischen Effekten kommt.
Ich habe die aktualsierte Datei angehängt.
20250404_Anonymisiert.ods
(55.59 KiB) 290-mal heruntergeladen
PS: Magst du vielleicht deine gebaute Funktion etwas erklären? Ich würde sie gerne ganz verstehen um zu lernen. :)
PPS: Die Methode kommt auch nicht mit mehreren Zeilen/Einträgen zurecht. Wenn das Datum mehrmals vorkommt wird 0 angezeigt. Ich versuche gerade noch deine Formel zu verstehen. :)
mikeleb
*******
Beiträge: 1420
Registriert: Fr, 09.12.2011 16:50

Re: Bestimmte Strings kopieren

Beitrag von mikeleb »

Hallo,
Die Methode kommt auch nicht mit mehreren Zeilen/Einträgen zurecht. Wenn das Datum mehrmals vorkommt wird 0 angezeigt.
Was soll denn dann angeziegt werden, wenn es zu dem Datum mehrere Einträge gibt?
Der Fehler tritt in der Situation auf, wenn in der Tabelle Input kein Eintrag gefunden wird. Dann nimmt die INDEX()-Funktion den Wert aus der Tabelle in der aktuellen Zeile der jeweiligen Monatstabelle. Das ließe sich korrigieren, aber löst das obige, grundsätzliche Problem nicht.
Gruß,
mikeleb
Benno1234
Beiträge: 4
Registriert: Do, 03.04.2025 21:08

Re: Bestimmte Strings kopieren

Beitrag von Benno1234 »

Moin,
bin jetzt auch wieder aus dem Urlaub zurück. :)
Hm... also ich würde jetzt pauschal sagen, das was am einfachsten ist einzusetzen. Also entweder den ersten oder letzten Wert/Zeile, die die Kriterien erfüllt bzw. gefunden wird.
Ist das soweit verständlich? Vielen Dank nochmal.
mfg
mikeleb
*******
Beiträge: 1420
Registriert: Fr, 09.12.2011 16:50

Re: Bestimmte Strings kopieren

Beitrag von mikeleb »

Hallo,
dann mal folgende Variante (beschränkt auf die ersten 10000 Zeilen der Tabelle 'Input', einzusetzen in die Zelle D6, mit Shift+Strg+Enter abschließen):

Code: Alles auswählen

=WENN(MAX(ZEILE($Input.$A$1:$A$10000)*($Input.$A$1:$A$10000=$G$2)*(B6>=$Input.$D$1:$D$10000)*(B6<=$Input.$E$1:$E$10000));WENN(INDEX($Input.$B$1:$B$10000;MAX(ZEILE($Input.$A$1:$A$10000)*($Input.$A$1:$A$10000=$G$2)*(B6>=$Input.$D$1:$D$10000)*(B6<=$Input.$E$1:$E$10000)))<>"Arbeitszeit";INDEX($Input.$C$1:$C$10000;MAX(ZEILE($Input.$A$1:$A$10000)*($Input.$A$1:$A$10000=$G$2)*(B6>=$Input.$D$1:$D$10000)*(B6<=$Input.$E$1:$E$10000)));"Arbeitszeit");"Arbeitszeit")
Die Formel (entsprechend der Aufgabe) schon hinreichend verzwickt, eine zweifachverschachteltze WENN()-Funktion und dann noch als Matrixfunktion.
Zu einer kurzen Erklärung:
Wenn
MAX(ZEILE($Input.$A$1:$A$10000)*($Input.$A$1:$A$10000=$G$2)*(B6>=$Input.$D$1:$D$10000)*(B6<=$Input.$E$1:$E$10000))
Dieser Teil liefert zunächst 10000 Werte und zwar immer die Zeilennummern in denen Name und Datum passen, sonst Null, und dann von allen diesen Werten den größten. Wenn es keinen passenden Eintrag gibt dann ist das Ergebnis Null, ansonsten ist es die letzte Zeile in der es einen entsprechenden Eintrag gibt. Diesen Wert benötigen wir dann gleich.
Dann
wird über eine zweite WENN()-Funktion der Text in dieser Zeile ausgewertet - siehe weiter unten.
Sonst
"Arbeitszeit"
sprich, wenn es keinen EIntrag gibt soll "Arbeitszeit" angenommen werden. Logischer wäre für mich allerdings "", dazu müsste aber für jeden Arbeitstag en Eintrag da sein
Nun zur inneren WENN()-Funktion:
Das Ergebnis von MAX(ZEILE($Input.$A$1:$A$10000)*($Input.$A$1:$A$10000=$G$2)*(B6>=$Input.$D$1:$D$10000)*(B6<=$Input.$E$1:$E$10000)) nenne ich mal: gefundeneZeile

Code: Alles auswählen

WENN(INDEX($Input.$B$1:$B$10000;gefundeneZeile)<>"Arbeitszeit";INDEX($Input.$C$1:$C$10000;gefundeneZeile);"Arbeitszeit")
So ist diese Funktion leichter lesbar:
Wenn
INDEX($Input.$B$1:$B$10000;gefundeneZeile)<>"Arbeitszeit"
Die INDEX()-Funktion wählt aus dem Bereich B1:B1000 die Zeile gemäß gefundeneZeile und prüft ob dort etwas anderes als "Arbeitszeit" steht.
Dann
INDEX($Input.$C$1:$C$10000;gefundeneZeile)
Wählt INDEX()-Funktion wählt aus dem Bereich C1:C1000 den Text aus der Zeile gefundeneZeile.
Sonst
"Arbeitszeit"
Die Formel ist schon so aufwändig, dass es sinnvoll wird, über das Design der Datei nachzudenken, sprich, ob es nicht einen effektiveren Aufbau gibt.
Gruß,
mikeleb
Antworten