Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bis zu drei Zeitpaare in eine Zelle berechnen

Bis zu drei Zeitpaare in eine Zelle berechnen
01.02.2016 14:27:33
Erik
Hallo,
Ein vorigen Thread konnte ich nicht weiter beschreiben, weshalb weiß ich nicht, und weshalb ich hier ein Neue zum gleichen Thema aufmache:
Jede Monat muss ich für jeden Tag meine gearbeitete Stunden aufschreiben. Für die Eintragung habe ich jeweils nur eine Zelle zur Verfügung. ZB. kommt in die Zelle „6-8,5“ oder „6-8,5 9-11“ oder „6-8,5 9-11 14-19“, zu stehen (mehr als drei Zeitpaare kommen aber nicht herein).
Aufgabe ist hier, zunächst heraus zu finden wieviel Zeitpaare in der Zelle stehen um dann die Berechnung durchführen zu können, für die drei Zeitpaare wäre das: 8,5-6 + 11-9 + 19-14
Durch Anregung und Suchen habe ich folgendes herausgefunden um die Menge der Zeitpaare zu bestimmen
=LINKS(A1;FINDEN(" ";A1)-1) so finde ich 6-8,5 (hier liegt wohl ein Fehler vor, sehe ich grad, weil es hier um ein einzelne Zeitpaar handelt und damit kein Leerzeichen enthält)
=TEIL(A1;FINDEN("##";WECHSELN(A1;" ";"##";1)+1;FINDEN("##";WECHSELN(A1;" ";"##";2))-FINDEN("##"; WECHSELN(A1;" ";"##";1))-1) so finde ich 9-11
=TEIL(A1;VERWEIS(9^9;FINDEN(" ";A1;ZEILE(1:999)))+1;9^9) so finde ich 14-19
Für die Berechnung:
=WERT(RECHTS(A12;LÄNGE(A12)-FINDEN("-";A12)))-WERT(LINKS(A12;FINDEN("-";A12)-1)) findet 2,5
Wenn ich das paar umkehre, 8,5-6, ist das eine Möglichkeit, eine andere wäre das „-“ durch „+“ zu ersetzen und vor dem Zahl 6 ein „-“ schreiben zu lassen.
Hier komme ich mit meinem Denken einfach nicht mehr weiter und brauche Euer Rat um eine schlanke und kurze Formel zu finden!
Schönen Dank!
Erik
PS. Die Anregung von Michael, (danke schön!), mehrere Zellen für die Eintragung zu nehmen ist gut, gleichzeitig für uns als Anwender nicht praktikabel, weil es zu viel Platz weg nimmt und mühsam ist, wir wollen schnell unsere Zeiten geschrieben haben, deshalb sollen alle an dem Tag gearbeitete Zeiten in eine einzelne Zelle geschrieben werden können.

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ein Link auf Deinen vorherigen Thread ...
01.02.2016 14:38:08
...
Hallo Erik,
... könnte hilfreich(er) sein. Du kommst über "Deine Beiträge" leichter ran, als wenn die potentiellen Helfer erst danach suchen. Ich selbst komme aber heute wahrscheinlich nicht mehr dazu auf Deinen Antwort zu reagieren.
Gruß Werner
.. , - ...

hier link
01.02.2016 17:43:56
Michael
Hi zusammen,
das war hier: https://www.herber.de/forum/archiv/1468to1472/t1471005.htm
Ich hab nochmal nen Versuch mit VBA unternommen:
Function rechnen(s As Variant) As Double
s = Replace(s, " ", "+")
s = Replace(s, ",", ".")
rechnen = -Evaluate(s)
End Function
Zunächst werden Leer- durch + Zeichen ersetzt, dann Kommas durch Punkte - derweil VBA mit englischer Zahlennotation rechnet.
Das Ganze wird dann durch evaluate gejagt und das Ergebnis negiert (weil 8-10 halt MINUS 2 ist).
Datei anbei: https://www.herber.de/bbs/user/103204.xls
Schöne Grüße,
Michael

Anzeige
AW: hier link
01.02.2016 20:09:30
Erik
Elegant, elegant, Michael!
Auf Anhieb fast alle meine Sorgen los!
Und es funktioniert sogar auch beim versehentliche Vergabe von mehrere Leerzeichen, oder beim Leerzeichen setzen vor- oder nach dem Minuszeichen, es lässt sich einfach nicht irritieren!
Wenn ich aber der Inhalt einer Zelle lösche und mit Enter bestätige, dann bekomme ich "#WERT!" zurück. Wäre dies zu vermeiden, bzw. zu unterdrücken oder gar nicht erst entstehen zu lassen? Denn dann würde das ganze Formular erst eine Augenweide sein ...
Darf ich nun, nachdem Du so eine saubere Lösung herbeigebracht hast, noch eine weiteren Wunsch Dir aufzeigen?
Wenn "22" am Ende eines Zeitenpaar steht, (steht immer am Ende des "Satzes") ZB: "16-22" oder "9-11 16-22" dann läutet dies eine Nacht ein. Und für eine Nacht von Freitag auf Samstag oder von Samstag auf Sonntag oder einer Nacht die in einen Feiertag übergeht, bekommen wir 2,5 Std. hinzugerechnet, für alle Übrige 2 Std. Ich habe ein Kalender, der sich für jeden Monat neu entsprechend des Datums die Wochentage ausfüllen lässt und der auch die Feiertage hervorleuchten lässt, sodass die bestimmte Nacht leicht auszulesen ist.
Vielen Dank, Michael!
Freudige Grüße,
Erik

Anzeige
gut, gut
02.02.2016 15:35:23
Michael
Hi Erik,
hier die Fuction mit einer kleinen Abfrage:
Function rechnen(s As Variant) As Double
If Len(s) 
Wenn weniger als 3 Zeichen (also minimal für z.B. 6-8) eingegeben wurden, gibt sie jetzt 0 zurück.
Man KÖNNTE den Funktionsaufruf mit ISTFEHLER klammern oder einen evtl. Fehler direkt in der Fkt. abprüfen, ich würde es aber lieber sein lassen, denn wenn irgendein #FEHLER bei der Eingabe kommt, weiß man gleich, daß man sich doch irgendwie vertippt hat.
Übrigens kommt bei 6-8 9 denn doch Mist raus, denn dann rechnet er 6-8=-2, dann +9, macht 7, nein, mal -1, also -7. Insofern könnte man die Zelle(n) mit einer bedingten Formatierung versehen, wenn was kleiner 0 herauskommt - sonst suchst Du Dir bei Eingabefehlern einen Wolf.
Function rechnen(s As Variant) As Double
If Len(s) 
Ich schreibe gerne "elegante" Codes und nehme das gerne als Kompliment, aber in diesem Fall muß ich das doch an MS weitergeben: so was wie evaluate händisch nachzuprogrammieren geht zwar, artet aber in Arbeit aus - der Befehl ist einfach klasse!
Happy Exceling,
Michael

Anzeige
AW: gut, gut
03.02.2016 11:01:28
Erik
Das Flutsch wie geschmiert mit Butter, Michael!
Wäre die Null, die nach eine zu-wenig-Zeicheneingabe erstellt wird, auch zu ersetzen durch gar nichts, bzw. wieder eine leere Zelle?
Du weißt, wegen der Augenweide …
Ein herzlichen Dank!
Erik

AW: gut, gut
03.02.2016 12:28:04
Michael
Hi Erik,
das könnte man schon machen, indem man die Function "As Variant" definiert und statt mit 0 mit "" vorbelegt, aber wie gesagt, ich bin da mehr dafür, so was mit bedingter Formatierung zu machen (Schriftfarbe weiß)...
Irgendwo kann man auch ein Zahlenformat definieren, das bei 0 nix, also "" anzeigt, aber ich hab's grad nicht präsent.
Schöne Grüße,
Michael
P.S.: Ach so, Du kannst die Function ja auch in der Zelle "kapseln", z.B. =Wenn(rechnen(A1)=0;"";rechnen(A1))
aber damit wird die Fkt. natürlich ZWEIMAL ausgeführt...

Anzeige
Format zB: 0;-0;;@ Gruß owT
04.02.2016 01:03:48
Luc:-?
:-?

AW: gut, gut
04.02.2016 13:22:15
Erik
Guten Morgen Michael,
Du Hast mich mit Deiner Hilfe weit an das Ziel hinkatapultiert! Atemberaubend! Danke!
Einen Rat bekam ich noch, die Funktion so zu ändern, dass das Double durch einen String ersetz wird und dann rechnen = „“ um ein leeres Feld zu kreieren:
Sie funktioniert gut! Ist diese Lösung für diesen Funktion vom Vorteil oder beeinträchtigt sie sie?
Die bedingte Formatierung hatte ich schon ausprobiert, doch konnte ich sie nicht zu meinem Glücke umsetzen. Was Luc grade heute, danke Dir, geschrieben hast, muss ich noch ausprobieren …
Weil noch mehr berechnet und eingeschrieben werden muss, wollte ich wissen ob ich diese Abfragen in der bestehende Funktion implantieren kann oder ob es sinnvoller ist neuen Funktionen zu schreiben?
ZB. wenn die „22“ drin steht muss in die Zelle „Nacht“ eine „1“ geschrieben werden um anzudeuten, dass es um eine Nacht handelt. Ebenso, wenn „22“ drinnen steht, in die Zelle „Nachtbereitschaft eine „2“ oder „2,5“ geschrieben werden.
Die Stunden, die an einem Sonntag, bzw. Feiertag gearbeitet werden in die Zelle „Sonntagsarbeit“, bzw. „Feiertagearbeit“ geschrieben. Wenn es um einen Samstag handelt, werden nur die Stunden ab 13.00 Uhr berechnet und diese in der Zelle „Samstagsarbeit“ eingetragen.
So, damit ist der Lack fertig.
Euch ein herzlichen Dank!
Erik

Anzeige
Danke Luc:-?, und weiter...
04.02.2016 16:21:25
Michael
Hi zusammen,
nee, nicht String, ich hab's doch schon geschrieben, dann lieber so:
Function rechnen(s As Variant) As Variant
If Len(s) 
Das Problem bei Deiner weiteren Frage ist, daß eine benutzerdefinierte Funktion nur Zellen verwurschteln kann, die als Parameter übergeben wurden (also in Klammern in der Zeile Function...); eine Ausgabe in andere Zellen ist nicht möglich.
Ausweg ist eine "Array-Formel", die dann etwa so aussehen könnte:
Function rech(s As Variant) As Variant
Dim a(1 To 2) As Variant
If Len(s) 

Bedient wird sie so, daß der Zielbereich, in den die Formel Werte schreiben soll, selektiert wird, dann wird die Formel eingegeben und mit Strg-Umschalt-Enter abgeschlossen, woraufhin sie in {} angezeigt wird.
In der Datei sind das die jeweils farblich markierten Bereiche...
Naja, eine einfacher zu handhabende Möglichkeit ist wohl, mit einem Workheet_Change-Ergeignis zu überprüfen, ob ein Wert in Spalte A geändert wurde und dann beliebige Rechenergebnisse in beliebige Zellen zu schreiben.
Aber: Du hast mittlerweile so viel neues Zeug aufgebracht, daß ich für eine weitere Bearbeitung gerne eine Beispieldatei mit dem aktuellen Stand hätte, selbstverständlich anonymisiert, und am besten mit farblich hervorgehobenen Einträgen dessen, was Du gerne hättest.
Die Datei: https://www.herber.de/bbs/user/103290.xls
Schöne Grüße,
Michael

Anzeige
AW: Danke Luc:-?, und weiter...
07.02.2016 19:08:02
Erik
Ups, mit Euch bist Du wohl gemeint, Michael! Entschuldigung für diese kleine Verwirrung!
Anbei die Datei mit Kalender, habe Erläuterungen dazugeschrieben und hoffe, dass sie klar und deutlich formuliert sind!
Habe versucht die Feiertage, Freitage und Samstage abzufragen, leider kam ich mit meine Kenntnis nicht weit ...
Wenn der Monat Februar erscheint, dann klicke bitte auf März, denn meine Erläuterungen habe ich für diesen Monat geschrieben.
Vielen Dank für Deine Hilfe, Michael!
Schönen Ausklang des Wochenendes
Erik
Anbei die Datei: https://www.herber.de/bbs/user/103349.xlsm

Anzeige
AW: Danke Luc:-?, und weiter...
09.02.2016 20:52:25
Erik
ich schreibe nochmal, weil ich mir nicht sicher bin ob ich das Kästchen aktiviert habe um dieser Thread weiter bei den offenen Fragen anzuzeigen ...

210 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige