Herbers Excel-Forum - das Archiv

Funktionen

Bild

Betrifft: Funktionen
von: Nico

Geschrieben am: 06.01.2007 17:43:15
Hallo zusammen,
ich habe folgendes Problem: Für einen Stundennachweis verwende ich eine Funktion die mir die Sollstunden des gesamten Monates errechnen soll. Für jeden Monat erstelle ich ein Sheet und setze die Funktion in der gewünschten Zelle ein. Die Funktion bekommt aus dem akuellen Sheet die Sollstunden der Werktage mit übergeben. Wenn ich jetzt auf das Sheet "Januar" klicke und bei den Sollstunden für die Wochentage etwas ändere errechnet die Funktion den neuen Sollwert für den Monat. Das blöde dabei ist, das der errechnete Wert in den anderen Sheets ebenfalls drin steht, obwohl dieser ein anderer sein müsste. Wie kann ich erreichen, das die Funktion nur im Activen Sheet arbeitet???
Gruß Nico
Bild

Betrifft: AW: Funktionen
von: fcs

Geschrieben am: 06.01.2007 22:48:26
Hallo Nico,
leider sind deine Informationne zu dürftig um zu helfen.
Wie sieht die Funktion aus (Code, Formelbeispiel etc.)?
Die Tatsache, dass sich die Ergebnisse in den anderen Tabellen ändern, wenn du im Januar-Blatt die Eingaben änderst, deutet darauf hin, dass du irgendein Problem mit den Zellbezügen hast. Verwendest du z.B. in der Funktionen einen Namen für einen Zellbereich?
Gruss
Franz
Bild

Betrifft: AW: Funktionen
von: Nico

Geschrieben am: 07.01.2007 15:12:51
Ok, hier mal die Funktion, die mir die Sollstunden ausrechnet.
=SollStd(AP11,AQ11) - in AP11 und AQ11 stehen die Sollstunden für Montag-Donnerstag und Freitag
Function SollStd(MoDo, Fr) As Double
Application.Volatile
Std = 0
Zähler = 4
For Each W In Range("E9:AI9")
Zähler = Zähler + 1  'in der 5.Spalte beginnen
Feier = Cells(10, Zähler).Value 'ist Feiertag?
If Feier = "FT" Then 'wenn Feiertag
Std = Std + 0
ElseIf Weekday(W) = 1 Or Weekday(W) = 7 Then 'wenn Wochenende
Std = Std + 0
ElseIf Weekday(W) > 1 And Weekday(W) < 6 Then 'wenn Mo-Do
Std = Std + MoDo
ElseIf Weekday(W) = 6 Then 'wenn Freitag
Std = Std + Fr
Else 'Sonstiges
Std = Std + 0
End If
Next W 'nächste Spalte
SollStd = Std
End Function

Die Funktion rechnet super, nur wie schon gesagt, wird das Ergebnis in sämtliche nicht aktive Sheet eingetragen. Da alle Monate gleich aufgebaut sind, steht die Funktion genau so in allen Sheets drin. Gruss Nico
Bild

Betrifft: AW: Funktionen
von: fcs

Geschrieben am: 07.01.2007 16:01:12
Hallo Nico,
es ist in der Tat ein Problem mit den Zellbezügen.
Da du den Bereich im Code fest vorgegeben hast wird in allen Tabellen immer jeweils der Bereich aus dem gerade aktuellen Blatt verwendet und damit in allen Tabellen ein neues Ergebnis berechnet.
Mit folgender Anpassung sollte es funktionieren, indem der Bereich mit den Datumsangaben der Monatstage in der Funktion als Eingabegröße angegeben wird. Auf das "Application.Volatile" kannst du dann auch verzichten.
Die Hilfsvariablen "Zähler" und "Feiertag" sind dann nicht erforderlich und auf die Hilfs-Variable "Std" kann man verzichten und direkt den Namen der Funktion einsetzen.
Formelbeispiel bei englischer Version mit Komma als Trennzeichen für die Parameter:
=SollStd(E9:AI9,AP11,AQ11)
Function SollStd(Monatstage As Range, MoDo As Double, Fr As Double) As Double
Dim W As Range
'  Application.Volatile
For Each W In Monatstage
If W.Offset(1, 0).Value = "FT" Then 'wenn Feiertag, Eintrag in Zelle unterhalb Datum
SollStd = SollStd + 0
ElseIf WeekDay(W) = 1 Or WeekDay(W) = 7 Then 'wenn Wochenende
SollStd = SollStd + 0
ElseIf WeekDay(W) > 1 And WeekDay(W) < 6 Then 'wenn Mo-Do
SollStd = SollStd + MoDo
ElseIf WeekDay(W) = 6 Then 'wenn Freitag
SollStd = SollStd + Fr
Else 'Sonstiges
SollStd = SollStd + 0
End If
Next W 'nächste Spalte
End Function

Gruss
Franz
Bild

Betrifft: AW: Funktionen
von: Nico

Geschrieben am: 07.01.2007 19:34:03
Hallo Franz,
du bist meine Rettung. Funktioniert bestens, auch das mit dem Offset, wäre ich ja nie draufgekommen. Ich hätte wahrscheinlich noch einen zweiten Bereich mit übergeben, aber so ist es natürlich ideal. Ich hatte allerdings auch schon die Vermutung, das das an dem Zellbereich in der Funktion liegt, konnte mir das allerdings nicht so richtig erklären.
Vielen Dank nochmal...
Gruss Nico
 Bild
Excel-Beispiele zum Thema "Funktionen"
Alle Prozeduren und Funktionen auflisten Handhabung von Arrays in benutzerdefininierten Funktionen
Variablen auf mehrere Arten in Funktionen integrieren Eine Zusammenstellung von Matrix-Funktionen