Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1476to1480
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

Urlaub hat doch auch ein

Urlaub hat doch auch ein
03.03.2016 18:33:57
Erik
Hallo Michael,
fällt mir noch was ein, denn, wenn man Urlaub macht, möchte man dies natürlich nicht aus eigener Tasche bezahlen …. also müsste, wenn Urlaub genommen wird, auch das Tagessoll eingetragen werden. : )
In eine Zelle habe ich das Tagessoll schon ausrechnen lassen und so müsste „Urlaub“ sich nur diesen Wert noch holen und eintragen …
Wie könnte dann die Funktion aussehen?
Function rechE(s As Variant, istJ As Variant) As Variant
If Len(s) 
Für Deine Mühe vielen Dank!
Erik

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Aha, du liest BTe also selektiv! Warum bleibst ...
03.03.2016 19:51:32
Luc:-?
…du nicht im ursprünglichen, Erik, :-|
da steht noch mehr! Es ist nicht besonders klug, eine UDF an wechselnde Bedingungen anzupassen, da verliert man leicht die Übersicht. Man schreibt eine UDF besser gleich so allgemein für ein bestimmtes Aufgabenfeld, dass die „Anpassung“ allein über die Argumentierung, also ggf auch Ausdrücke (inkl Fmln) in diesen, erfolgen kann. XlStandardFktt sind so konstruiert!
Luc :-?

Verschoben?
03.03.2016 20:49:46
Erik
Na ja, die Funktion rechL nutze ich so kurz bei eine bestimmte Aktion, die RechE wiederum an eine andere Stelle und eben beim jetzige sollte der Urlaub und dem Kranksein eingebettet werden ...
Danke schön für das wieder auf den rechten Weg bringen :)
Erik

Anzeige
tja, der rechte Weg...
04.03.2016 01:19:59
Michael
Hi zusammen,
also, so gesehen möchte ich mich dem Luc:-? fast anschließen...
Du steuerst da auf eine Eierlegendewollmilchsautabelle zu, und je mehr man da reinbaut, desto unabsehbarer sind die Ergebnisse.
Angefangen hat es damit, Arbeitszeiten zu erfassen, und das geht ja ganz gut. Ich würde mich fragen, ob der Abgleich mit Krankheits- oder Urlaubstagen (irgendwann kommen dann noch Sonderurlaube, Schulungen und Messen dazu) wirklich innerhalb DIESER Tabelle erfolgen muß, oder ob nicht eine "externe" Instanz dafür herangezogen werden sollte.
Aber um auf Deinen Eingangssatz zurück zu kommen: ich möchte nicht nur nicht Urlaub, sondern auch keine Krankheitstage aus der eigenen Tasche bezahlen...
Funktionen können nur auf die Felder zugreifen, die übergeben werden, d.h. eine Möglichkeit ist, einen weiteren Parameter einzuführen und darauf zu reagieren.
Eine andere Möglichkeit ist, die UDF in der Tabelle innerhalb einer Formel einzusetzen, etwa so:
=wenn(C2="Urlaub"; E2; rechE(in der alten;Version)) usw.
Das kann man ja mit UND und ODER auch beliebig ausbauen.
Schöne Grüße,
Michael

Anzeige
AW: tja, der rechte Weg...
05.03.2016 18:59:39
Erik
Hallo Michael,
Als nicht-ganz-Wissende finde ich nur durch Euch den rechten Weg …, nichtwahr? :) Dein Tipp zum Schluss den UDF innerhalb einen Formel einzusetzen passt wunderbar, jetzt habe ich alles erledigt!
Übrigens ging es nur um den Urlaub, nicht um Kranksein oder anderem, denn das ist an dieser Stelle nicht gefragt. Den Überblick ist somit gewährleistet, schlank und fein!
Ja, nun komm ich an meinem letzten Magenrummeln, da erst bei der Einbettung mir folgendes bewusst wurde:
Den ganz untenstehende Funktion gibt mir den Nachnamen und Vornamen zurück und davon ist einen zuviel, den Vornamen, denn soviel Papierplatz habe ich nicht…
Dafür habe ich folgende Funktion gefunden, die glatt über die Bühne hinweg läuft, diese aber zu implantieren übersteigt, wie schon bekannt, fast vollständig mein Wissen. Könntest Du mir diesen bitte noch einbauen? Wahrscheinlich geht es nur um den If-Teil?
Function SplitExtract(strText As String, _
intNum As Integer) As String
Dim X As Variant
X = Split(strText)
If intNum > 0 And intNum - 1 
Dann habe ich noch Folgendes übersehen, was mir sehr peinlich ist:
Userbild
gesucht wird in der Zeile G8:R8 nach den Namen der festen Mitarbeiter.
Es gibt aber auch Aushilfen, die sind dort nicht zu finden …, sondern die stehen in der Spalte D12:D42 und müssen natürlich auch nachtbereit sein…
Um die „22“ der Aushilfen zu finden könnte ich die Zeile G12:GR12 auf E12:R12 erweitern. Dann sind die zumindest erfasst.
Nun aber die Nachnamen, wie kommen die denn dann an ihren Platz? Könntest Du mir bitte hier auch eine Hilfestelung geben?

Function Nacht(FbisM As Range, FbisMP As Range) As Variant
Dim i&
'Stop
If FbisM.Count  12 Then
Nacht = "#F-M?"
Else
If FbisMP.Count  12 Then
Nacht = "#F-M?"
Else
Nacht = ""
For i = 1 To 11 Step 2
If Len(FbisM(i)) > 3 Then
If Right(Trim(FbisM(i)), 2) = "22" Then Nacht = Nacht & FbisMP(i) & " "
End If
Next
End If
End If
End Function
So, das war das letzte, wirklich!
Ich hoffe, dass ich Dich hiermit nicht überstrapaziere?
Und dann … trinken wir einen Kaffee und essen Schwarzwälder? Auf meine Kosten natürlich!
Schöne Abendgrüßen!
Erik

Anzeige
AW: tja, der rechte Weg...
07.03.2016 19:58:43
Michael
Hi Erik,
ich muß Dich nochmal vertrösten - und ab in die Arbeit.
Mir ist auch nicht ganz klar, was die untere Funktion nun ausspucken soll. Mit Beispieldatei ist das immer besser nachzuvollziehen.
Grüße erst Mal,
Michael

Der goldene Weg?
07.03.2016 22:34:19
Erik
Hi Michael,
Nachtarbeit? Kellnern? Krankenbruder? Taxifahrer? Komm gut durch!
Anbei die gewünschte Beispielsdatei, möchte es natürlich nicht unnötig erschweren ...
https://www.herber.de/bbs/user/104175.xlsm
Funktion SplitExtract gibt z.B. bei "Statia Annamarie Blumfeld", je nach Wunsch, den 1, 2. oder den 3. Teil des ganzen Namens aus.
Schönen Gruß
Erik

Anzeige
Die 'gefundene Funktion' kann ich in deiner ...
08.03.2016 00:56:57
Luc:-?
…BspDatei nicht finden, Erik,
ansonsten ginge das statt so …
=SplitExtract("Statia Annamarie Blumfeld";SPALTE(A1))
…analog auch so …
=Splint("Statia Annamarie Blumfeld";;SPALTE(A1))
…oder komplexer so …
=INDEX(VSplit("Statia Annamarie Blumfeld");SPALTE(A1))
=INDEX(SplitVx("Statia Annamarie Blumfeld");SPALTE(A1))
=INDEX(Sprite("Statia Annamarie Blumfeld");SPALTE(A1)) * Nicht im Archiv!
…bzw ganz simpel so …
=INDEX(Splitt("Statia Annamarie Blumfeld");SPALTE(A1))
…für Statia als Ergebnis (und beim Ziehen in den NachbarZellen dann die anderen Teile).
Aber im Ggsatz zu deiner UDF (User Defined Function) können die anderen (ggf ohne INDEX) auch alle Teile in einer mehrzelligen (pluralen) MatrixFml wiedergeben, manche können sogar ganze Bereiche/Vektoren auf einmal verarbeiten, Splint letzteres zwar nicht, dafür kann man aber zusammenhängende Teile ausgeben, wobei das real letzte Teil auch das geforderte letzte ersetzen kann. Mit =VJoin(Splint("Statia Annamarie Blumfeld";;1;2;1)) wäre so auch Statia Blumfeld als Ergebnis möglich.
Ansonsten gefällt mir aber, dass sich da jemand bereits vor 14 Jahren Gedanken über eine Kombi von Split und INDEX gemacht hat, wenn für meinen Geschmack auch nicht weitgehend genug (das Original-Tutorial ist allerdings nicht mehr erreichbar, dafür nervt Google unter dem Link). Wie ich dir gezeigt habe, gibt's aber Neueres und Komfortableres (das war nur ein im Archiv relativ leicht auffindbarer Ausschnitt, bei UDF Trennen wird's schwierig).
Gruß, Luc :-?
Besser informiert mit …

Anzeige
mal gucken
08.03.2016 14:06:41
Michael
Hi zusammen,
also, an der Qualität der Daten muß ich schon herummäkeln: die "Glatze" ist natürlich a) ohne Leerzeichen zwischen den Namen und b) haben die Namen eine andere Reihenfolge als bei den anderen.
SO wird das nix, gell!
Ich habe die "Nacht" (und ja, mit Taxi biste richtig gelegen) mal abgeändert:
Function Nacht(FbisM As Range, FbisMP As Range) As Variant
Dim i&
Dim letzterName$, v As Variant
'Stop
If FbisM.Count  12 Then
Nacht = "#F-M?"
Else
If FbisMP.Count  12 Then
Nacht = "#F-M?"
Else
Nacht = ""
For i = 1 To 11 Step 2
If Len(FbisM(i)) > 3 Then
If Right(Trim(FbisM(i)), 2) = "22" Then
v = Split(Trim(FbisMP(i)), " ")
letzterName = v(UBound(v))
Nacht = Nacht & letzterName & " "
End If
End If
Next
End If
End If
und in eine Formel gesteckt (hier für T12):
=WENN(NICHT(ISTFEHLER(FINDEN("22";E12)));D12;Nacht(G12:R12;$G$8:$R$8))
Die $ bei den Bezügen sind Dir wohl entgangen, oder? Damit wird der Bereich (in dem Fall insbesondere die Zeile 8) "festgenagelt", so daß Du die Formel einfach nach unten kopieren kannst.
Bei dieser Gestaltung wird "Nacht" nur ausgeführt, wenn in Spalte E kein 22 vorkommt; falls Du BEIDES aneinandergehängt möchtest, brauchst Du nur die äußere Formel zu ändern...
=WENN(NICHT(ISTFEHLER(FINDEN("22";E12)));D12&
" "&Nacht(G12:R12;$G$8:$R$8);Nacht(G12:R12;$G$8:$R$8))

... hast aber dann wieder das K. vom Zehner dabei, hehe.
Sag, warum nimmst Du nicht einfach Namenskürzel, wie in jeder vernünftigen Firma? Gla, Dur usw., vielleicht auch Moll.
Grüezi,
Michael

Anzeige
AW: mal gucken
09.03.2016 09:24:48
Erik
Hi Michael,
Leider sind die nicht so musikalisch, wie ich sie gerne singen hören würde… : )
Sag mal, könnten wir das K. von Zehner noch trennen und nur „Zehner“ ausgeben?
Luc hat schon was an die Hand gegeben?
Fröhliches Sein!
Erik
PS. Danke für die Festnagelidee, dass spart Arbeit!

AW: mal gucken
09.03.2016 16:29:25
Michael
Hi Erik,
na, dann damit:
Function nt(n As Range, Optional wie As String) As String ' nt wie Namensteil
Dim i&, v As Variant
If n = Empty Then nt = "#empty": Exit Function
v = Split(Trim(n.Text), " ")
If LBound(v) > -1 Then
If wie  "e" Then nt = v(UBound(v)) Else nt = v(LBound(v))
Else
nt = "#" & n.Text
End If
End Function
Aufruf mit

=WENN(NICHT(ISTFEHLER(FINDEN("22";E12)));nt(D12);Nacht(G12:R12;$G$8:$R$8))
^^^^^^^

Die Function nimmt immer den letzten Namen, außer Du rufst sie mit "e" als zweitem Parameter auf.
Happy Exceling, Du Frohnatur,
Michael
P.S.: he, mach mal nen Excel-Kurs, ja? Die $ sind reine Basics! Ich habe einige Bücher vom Herdt-Verlag durchgeackert.

Anzeige
Leer werden ohne Folgen?
10.03.2016 14:43:03
Erik
Joa, ich werde mich auf dem Acker begeben!
Es läuft süß wie Honig! Danke!
Ich habe mir ein Button zugelegt um die Eingaben auf einmal zu löschen und somit wieder ein Leeres Blatt vor mir zu haben. Dieser habe ich mit dem folgende Sub unterlegt:
Sub leeren()
Sheets(1).Range("D9:D39").ClearContents
End Sub
Das läuft auch super bei den Berechnungen der Stundenzahl. Nun wollte ich diesen Button auch in "Stundennachweis" (das erste Formular was wir gemacht haben) einpflanzen, da passiert mir aber Folgendes: die Spalten "Feiertag", "Sonntag" und "Samstag" werden quittiert mit #WERT, die Spalten: "Stundenzahl", "Nachtrag" und "NB" meckern aber nicht! Es ist als würde ich durch das Leerfegen den Befehl geben die "Leerheit" zu berechnen?
Wenn ich eine Eintragung per Hand lösche, dann ist und bleibt alles in Ordnung!
Wie kann ich das ungesehen machen?
Nordischen Gruß
Erik

Anzeige
Leer werden ohne Folgen 2?
10.03.2016 16:55:53
Erik
Habe vergesse das Häckchen für die Offenheit zu setzen ...

Geht die Tür noch mal auf?
10.03.2016 17:03:58
Erik
Bin gespannt ...

AW: mal gucken
09.03.2016 15:38:25
Erik
PS. Um des Ordnungswillens: Wundere Dich nicht, dass ich bei Zehner K. nach der Herausgabe von Zehner, statt K. gefragt habe. Ich habe nun bei alle erst die Nachname und dann die Vorname gesetzt und UBound ersetzt durch LBound, sodass ich immer die Nachname auf dem Teller bekomme.
So, die Welt ist wieder in Ordnung, was?
Gruß
Erik

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige