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

Noch was Kleines?

Noch was Kleines?
18.02.2016 12:03:03
Erik
Mein letzten Beitrag wurde nicht offen im Forum gestellt, warum was ich diesmal auch wiederum nicht? Hier den Link dazu: https://www.herber.de/forum/archiv/1472to1476/t1474799.htm
Mein Text war:
Guten Morgen Michael!
Es ist wie vom Zauberhand ... kaum hat man ein Eintrag mit Enter bestätigt und schon sitz alles auf seinem Platz!
Danke!
Noch ein Kleinigkeit, ich hoffe zumindest, dass es eine ist: die Formel =WENN(ZÄHLENWENN(Feiertage!$B$2:$D$12;Kalender!C11+1)*1+(WOCHENTAG(C11)=6)*1+(WOCHENTAG(C11)=7)*1>0;“J“;““) in Spalte A haben wir für jeden Monat, egal ob es 28, 30 oder 31 Tage hat ganz nach unten gezogen. Damit gibt sie, wenn eine Monat zB. nur 30 Tage hat, dem nicht existierende 31. ein #WERT zurück. Könntest Du diese Formel mit den Monaten entsprechend wachsen, bzw. schrumpfen lassen, sodass sie kein #WERT mehr ausgibt?
Fröhlichen Tag!
Erik
PS. Bei den Funktionen macht es nichts aus, da, wenn sie nicht betätigt werden auch nichts herausgeben, da muss ich nur die kleine Dreieckchen dauerhaft entfernen, heißt es nicht überprüfen zu lassen? Speichert die Mappe diese Einstellung für immer oder wird sie wieder aktiviert, wenn sie neu geöffnet wird?

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
das kannst Du selbst,
18.02.2016 12:58:17
Michael
lieber Erik,
denn das hast Du bereits bei der Anzeige der Tage gemacht: daß die Formel bis 28 nach unten gezogen werden kann, aber für 29, 30 und 31 leicht geändert war.
Und ich hatte darauf hingewiesen, daß es bei der "J"-Formel ganz genauso ist.
Mann, Du mußt doch nur nochmal eine alte Datei nehmen und kannst es da rauskopieren...
=WENN(B39"";WENN(ZÄHLENWENN(Feiertage!$B$2:$D$12;Kalender!B39+1)*1+(WOCHENTAG(B39)=6) *1+(WOCHENTAG(B39)=7)*1>0;"J";"");"") 

... in A39 und bis A41 kopieren.
Die Betonung liegt auf dem WENN - wenn nämlich der Tag in B (oder wo er mittlerweile sein mag) "" ist, dann wird hier auch nichts angezeigt.
Hättste selbst gekonnt, ich weiß - ärgere Dich ruhig, hehe.
Dir auch nen fröhlichen Tag, hier lacht jedenfalls die Sonne,
Ciao,
Michael

Anzeige
AW: das kannst Du selbst,
18.02.2016 13:11:00
Erik
Scheibenkleister!

Habe ich richtig und mehr gedacht? ;)
19.02.2016 23:31:27
Erik
Michael, noch habe ich etwas gravierendes gefunden!:
Für die Arbeit am Feiertage und Sonntage
Function rechH(s As Variant, istSo As Variant, istF As Variant) As Variant
rechH = ""
If InStr(istSo.Text, "So") > 0 And istF  "F" Then rechH = rechE(s, "")
End Function 
Function rechG(s As Variant, istF As Variant) As Variant
rechG = ""
If InStr(istF.Text, "F") > 0 Then rechG = rechE(s, "")
End Function

greift er zurück auf rechE:
Function rechE(s As Variant, istJ As Variant) As Variant
If Len(s) 

Dabei zählt sie bei 9-12, 3 Std., bei 16-22 kommt sie logischerweise aber auf 8 Std., sollte aber 6 Std. sein...
Ich bräuchte eigentlich nur:
If Len(s) 'statt rechE, rechH bzw. rechG?
End If
End If

Auf:
 If Right(Trim(s), 2) = "22" Then
If istJ = "J" Then rechE = rechE + 0.5
rechE = rechE + 2
End If

könnte ich verzichten. oder?
Oder ich greife zurück auf rechE und gib ihn die Anweisung, das er die If-Anweisung lassen soll?
Was meinst Du?
Liebe letzte Grüße?!
Erik

Anzeige
AW: das kannst Du selbst,
20.02.2016 09:43:35
Erik
Schönen Morgen mit viel Sonnensein, Michael,
Jetzt bin ich an eine Vorlage dran, die gleich so aufgebaut ist wie dieser. Da geht es nun um die Planung der Stunden für den nächsten Monat.
Außer den kommenden Arbeitszeiten wird natürlich auch die wohlverdienten Urlaub darin vermerkt!
Wenn ich das jetzt in der Spalte D eintrage, kommt natürlich, weil er gerne rechnet, den #WERT zurück :(
Wie kann ich es doch erlauben, dass der Urlaub genommen werden kann, bzw. er, trotzdem er keinen Zahl ist, stehen bleibt, ohne seine #WERT in Frage stellen zu müssen?
Vielen Dank für deine Antwort!
Viele Grüße
Erik

Anzeige
Aaalso,
20.02.2016 14:01:36
Michael
Hi Erik,
zum 19.2. 23:31:27: das Einfachste ist, die RechE einfach zu kopieren, der Kopie einen anderen Namen zu verpassen, rauszulöschen, was Du nicht benötigst, und die Kopie dann aufzurufen - Du mußt nur aufpassen, daß Du dann in der Kopie nicht nur den Namen der Funktion änderst (also oben, rechts vom "Function"), sondern auch die Zuweisung(en) innendrin (also das RechE = xxx).
zum 20.02.: ich hatte zwischendrin eh schon mal den Gedanken, aus EINEM bestehenden Tabellenblatt die Blätter für alle Monate des Jahres automatisiert zu erzeugen. Das geht ja, weil es kaum zeitkritisch ist, fast mit Makrorekorder, im Prinzip:
setze in G6 = "Januar"
kopiere das Blatt auf "Januar"
kopieren/Inhalte einfügen der unveränderlichen Spalten ("F", "J", Datum), um Rechenpower zu sparen (weil Werte statt Formeln)
wiederhole bis "Dezember"
Ich bin noch nicht ganz wach, also mag ich auf die Details mit dem Urlaub nicht eingehen - bastle halt mal damit herum, und wenn es nicht hinhaut, lädst Du bitte ne aktuelle Datei hoch.
Bis dahin wünsche ich Dir auch einen fröhlichen Tag
(wollen wir's hoffen, ich muß nachher in die Arbeit),
Schöne Grüße,
Michael

Anzeige
Licht in die Bude?
23.02.2016 13:13:28
Erik
Bonjour Michael, ca va bien?
Habe die Funktion rechE kopiert und umbenannt in rechL, und was ich nicht brauchen konnte, wegradiert. (If len(s)<3 … könnte doch auch weg, oder, weil es schon in rechE vollzogen wird?)
Dann habe ich Tage gebraucht um zu finden warum sie mir folgende Fehler vorwirft: „Fehler beim Kompilieren: Falsche Anzahl an Argumente oder ungültige Zuweisung zu einer Eigenschaft“. Habe nichts anderes als Verzweiflung gefunden … Kannst Du es mir sagen?
Nun habe ich auch die Vorplanung eines Monats angehängt, weil es auf das gleich Prinzip beruht. Dort habe ich beschrieben welche Funktionen ich mir noch wünsche um es vollständig zu machen.
Manches lässt sich auch über die bedingte Formatierung machen, wichtig ist mir hierbei, dass die ganze Vorlage nicht manipuliert werden kann, deshalb hatte ich gedacht, alles per VBA zu machen, sinnvoll? Könnte aber natürlich auch alle Zellen wo keine Eingabe erwartet wird, sperren, oder?
Freue mich über deine Antwort
und ein Dank im Voraus!
Erik
Anbei die Datei:
https://www.herber.de/bbs/user/103803.xlsm

Anzeige
AW: Licht in die Bude?
23.02.2016 16:44:58
Michael
Hi Erik, ca va. ca va?
So langsam übersteigt meine investierte Zeit die kostenlose Forumsarbeit...
Ich habe es mir mal angesehen.
a) RechL wird im Tabellenblatt nirgends aufgerufen. Ich hab's mal irgendwo reingeschrieben, und es funktioniert. Ich kann keinen Fehler reproduzieren.
Die Abfrage nach der Länge kann nicht raus, weil rechE, rechL und wie sie alle heißen, ja eigenständige Funktionen sind.
Kurz: die eine weiß nicht, was die andere tut - in diesem Fall ist das ausnahmsweise auch erwünscht.
b) E17 berechnet 10 und E24 7, weil die 22 am Ende steht - das wolltest Du doch so?!
c) Um eine Funktion nachverfolgen zu können, setzt man entweder einen "Breakpoint" im VB-Editor oder schreibt ein stop in den Code. Dabei habe ich üblerweise festgestellt, daß der Test "endlos" zu laufen schien, was daran liegt, daß bei einer Änderung in einer Zelle immer ALLE Funktionen (selbst geschrieben, aber natürlich auch die von Excel selbst) durchkalkuliert werden - auf die Dauer ist das lästig: zum Testen sowieso (ich kann quasi warten, bis die Funktion endlich mal die Zelle durchläuft, die mich gerade interessiert) - aber auch grundsätzlich wird damit die CPU für nix und wieder nix belastet.
Man kann das schon anders gestalten, nämlich so, daß eine Kalkulation nur dann stattfindet, wenn man tatsächlich eine Zelle ändert, d.h. Zeiten eingibt.
Damit ergibt sich auch die Antwort auf die letzte Frage: klar, man kann alle Zellen bis auf die Zeiteingabe sperren - allerdings muß Dir bewußt sein, daß ein "echter" Schutz kaum möglich ist: ein Profi wird einen Weg zur Manipulation finden.
Also, hier mal zum Spielen:
Function Nacht(HbisM As Range, HbisMP As Range) As Variant
Dim i&
'Stop
If HbisM.Count  6 Then
Nacht = "#H-M?"
Else
If HbisMP.Count  6 Then
Nacht = "#H-M?"
Else
Nacht = ""
For i = 1 To 5 Step 2
If Len(HbisM(i)) > 3 Then
If Right(Trim(HbisM(i)), 2) = "22" Then Nacht = Nacht & HbisMP(i) & " "
End If
Next
End If
End If
End Function
Für die Zeile 13 z.B. in N13: =nacht(H13:M13;$H$8:$M$8)
Die Spalte M braucht es eigentlich nicht, aber auch schon egal.
Ich würde sagen: spiel mal ein bißchen damit herum, und wegen "Sperrung" bzw. einer völlig anders getriggerten Sub sprechen wir noch mal.
Schöne Grüße erst mal,
Michael

Anzeige
AW: Licht in die Bude?
23.02.2016 18:13:01
Erik
Hi Michael,
Bitte um Entschuldigung, wenn ich hier nicht deutlich gewesen bin:
Zu b) E17 berechnet 10 und E24 7, weil die 22 am Ende steht - das wolltest Du doch so?! Vollkommen richtig!!
Nicht aber für die Funktion um die Sonn- und Feiertage zu berechnen, weil da nur die reine Arbeitszeit berechnet wird! Deshalb keine Zugabe von 2 oder 2,5!
Um das auszurechnen haben wir die Funktion rechL geschaffen und so lautet die Sonntagsfunktion:
Function rechH(s As Variant, istSo As Variant) As Variant
rechH = ""
If InStr(istSo.Text, "So") > 0 Then rechH = rechE(s, "")
End Function
rechH = rechE(s, "") soll umgestellt werden auf: rechH = rechL(s, ""), dann kommt bei mir den Fehlermeldung.
Danke für die Nacht!
Schönen Abend!
erik

Anzeige
ach so, na dann
23.02.2016 18:49:39
Michael
Hi Erik,
das liegt daran, daß rechE *zwei* Parameter erwartet, rechL nur einen, d.h. das Ganze sieht dann so aus:
Function rechH(s As Variant, istSo As Variant) As Variant
rechH = ""
If InStr(istSo.Text, "So") > 0 Then rechH = rechL(s)
'                                                 ^^^^^ ohne ,""
End Function
Tja, da mußt halt aufpassen wie a Luchs -
Lux ins Dunkle, hehe,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige