function Bereich

Bild

Betrifft: function Bereich von: Alexander
Geschrieben am: 10.03.2005 21:33:32

Hallo, ich habe ein Problem mit folgender Funktion:

Function Abwesenheit(Bereich As Range, Kuerzel As String)
For Each cell In Bereich
    If cell = Kuerzel Then
        zwi = zwi + 1
    Else
        If zwi > 3 Then
            Abwesenheit = Abwesenheit + zwi - 1
            zwi = 0
        End If
        zwi = 0
    End If
Next
End Function



Sie läßt sich als benutzerdefinierte Funktion leider nicht auf mehrere Arbeitsblätter anwenden, was aber zwingend erforderlich wäre.
Also kurz gesagt, bei den Jan05, Feb05 usw... benannten Blättern funktioniert zwar :

=Abwesenheit('Jan 05'!B8:AF8;"U")

leider aber nicht:

=Abwesenheit('Jan 05'!B8:AF8;'Feb 05'!B8:AF8;"U")

eventuell ist die Lösung ja ganz simpel, ich komme leider nicht drauf.

Für jegliche Hilfe bin ich natürlich im Voraus dankbar...

Greetz Alexander
Bild


Betrifft: AW: function Bereich von: Boris
Geschrieben am: 10.03.2005 21:39:32

Hi Alexander,

woher hast du diese Funktion? Was soll sie genau bezwecken? Sie macht für mich wenig Sinn...
Im Zweifel: Addier sie einfach 12 mal.

Grüße Boris


Bild


Betrifft: AW: function Bereich von: Alexander
Geschrieben am: 10.03.2005 21:49:31

Die macht schon Sinn, Sie zählt Abwesenheitstage (Kürzel: z.B. U für Urlaub), allerdings nur wenn die betroffene Person länger als 3 Tage weg ist, ausserdem soll der An- bzw. Abreisetag nur als ein halber gelten.

Danke aber erstmal für Deinen Vorschlag, wobei ich die Lösung halt für umständlich gehalten hatte, allerdings, wenns nicht anders geht....

Mir will halt nur nicht in den Kopf, daß ich den Bereich nicht über ein Arbeitsblatt hinaus erweitern kann, muss doch irgendwie gehen, denn schöner wärs schon.

Aber dank einstweilen...

Alexander


Bild


Betrifft: AW: function Bereich von: Boris
Geschrieben am: 10.03.2005 22:07:20

Hi,

ok - Sinn verstanden - und dennoch hat die Funktion Schwachstellen:

 
 AB
1U0
2U 
3U 
4U 
5U 
Formeln der Tabelle
B1 : =abwesenheit(A1:A5;"U")
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  


Hier sollte wohl eigentlich 4 rauskommen...
Schwäche: Es muss mindestens wieder 1 Zelle ungleich "Kürzel" da sein - sonst wird nicht gezählt.

Und anscheinend ist die Funktion auch nicht von dir...?!?
Das Selbe mit mehreren Blättern zu realisieren, geht nur mit optionalen Parametern - da ist es für den Anfang einfacher, 12 mal zu addieren.

Grüße Boris


Bild


Betrifft: AW: function Bereich von: Martin Beck
Geschrieben am: 11.03.2005 09:58:46

Hallo Boris,

von mir. Hier der dazugehörige Archivthread:

https://www.herber.de/forum/archiv/580to584/t580271.htm

Gruß
Martin Beck


Bild


Betrifft: AW: function Bereich von: Alexander
Geschrieben am: 10.03.2005 22:04:04

Habs mir jetzt nochmal überlegt, würde das ganze schon lieber über VBA lösen, weiß aber nicht wie, bin für weitere Tips sehr dankbar.

greetz Alexander


Bild


Betrifft: Hä? von: Boris
Geschrieben am: 10.03.2005 22:09:22

Hi,

...wie darf man das verstehen?

Boris


Bild


Betrifft: AW: Hä? von: Alexander
Geschrieben am: 10.03.2005 22:18:48

Naja, daß ich mir das Alles grad nochmal hier so angeschaut habe und es zumindest momentan noch nicht mit 12 mal multiplizieren lösen möchte.
Wenn mir nichts Anderes übrig bleibt werd ichs natürlich machen nur im moment irritiert mich eben, daß ich bei den bereists vorgegebenen Funktionen durchaus "blätterübergreifend" Bereiche definieren kann und in dem akuten Fall nicht.
Evtl. ist es ja auch nur übertriebener Perfektionismus.

Greetz Alexander


Bild


Betrifft: AW: Hä? von: Boris
Geschrieben am: 10.03.2005 22:26:51

Hi,

bitte mal ganz direkt:
Die Funktion ist nicht von Dir - und du hast auch keine Ahnung von VBA...!?
Ich hab dir bereits ne klare Antwort gegeben - bau dir optionale Paramter in die Funktion ein.
Und zum Vergleich mit den Excel-Eigenen Funktionen: Die sind hochkompliziert programmiert - dagegen ist deine UDF (wie die meisten anderen im übrigen auch) - mit Verlaub - ein Fliegensch... ;-)))

Grüße Boris


Bild


Betrifft: AW: Hä? von: Alexander
Geschrieben am: 10.03.2005 22:36:34

Wow, das war direkt...
Von mir ist sie nicht, (wie auch nie behauptet) Ahnung hab ich keine (wie im ersten Beitrag angegeben).
Wobei, wenn Sie von mir wäre UND ich Ahnung hätte, wäre ich wohl nicht mit dem Problem hier erschienen.
Bei meinem letzten, Ähnlich gearteten Problem wurde mir genau hier sehr nett geholfen.

Also, trotz Allem, danke für die Hilfe, hab Dich eventuell mißverstanden.

Alexander


Bild


Betrifft: Bitte nicht falsch verstehen... von: Boris
Geschrieben am: 10.03.2005 22:43:10

Hi Alexander,

hier wird dir grundsätzlich gerne geholfen - natürlich auch von mir.
Nur hätte die Frage vielleicht so lauten sollen:

"Ich habe hier eine Funktion von jemandem bekommen. Sie zählt Abwesenheiten ab 3 Tagen und mehr. Die funktioniert auf einem Blatt einwandfrei. Jetzt möchte ich sie aber gerne für mehrere Blätter anwenden, habe aber selbst leider keine Ahnung, wie das geht. Kann mir jemand helfen?"

So wie du es formuliert hattest, hab ich dir nur den Hinweis auf die optionalen Paramter gegeben - aber darauf bist du gar nicht eingegangen.

Gedulde dich ein wenig - dann bekommst du hier auch noch die gewünschte Lösung ;-)

Grüße Boris


Bild


Betrifft: Ups... von: Alexander
Geschrieben am: 10.03.2005 22:48:39

O.K. dann hatte ich wirklich einiges falsch verstanden und entschuldige mich hiermit dafür.
Dann werd ich mal ganz kleinlaut der Dinge (Lösungen...) harren die da kommen.

Und mich abermals im Voraus dafür bedanken...


Bild


Betrifft: Für´s Erste mit ParamArray von: Boris
Geschrieben am: 11.03.2005 00:11:24

Hi Alexander,

eine Möglichkeit wäre folgende:

Option Explicit

Function ABWESENHEIT(Kuerzel As String, ParamArray Bereiche()) as Long
Dim Cell As Range
Dim Zwi As Long
Dim i As Integer
For i = LBound(Bereiche()) To UBound(Bereiche())
    For Each Cell In Bereiche(i)
        If Cell = Kuerzel Then
            Zwi = Zwi + 1
        Else
            If Zwi > 3 Then
                ABWESENHEIT = ABWESENHEIT + Zwi - 1
                Zwi = 0
            End If
            Zwi = 0
        End If
    Next Cell
Next i
End Function


Allerdings sind die Bereiche einzelne anzugeben - Funktionssyntax:
=ABWESENHEIT(Kuerzel;Bereiche;...)

Also z.B.:
=ABWESENHEIT("u";Tabelle1!A1:A10;Tabelle2!A1:A10;Tabelle3!A1:A10)

Die von Dir Eingangs gewünschte Schreibweise á la =SUMME(Tabelle1:Tabelle3!A1:A10) muss ich noch überdenken.

Grüße Boris


Bild


Betrifft: AW: Für´s Erste mit ParamArray von: Alexander
Geschrieben am: 11.03.2005 06:30:00

Hi Boris

Wow, so funktionierts und genauergesagt hatte ich es mir auch so in der Art vorgestellt.
Dankeschön...
Wie könnte ich das Ganze jetzt noch idiotensicher gestalten, so dass es egal ist ob ich "U" oder "u" in die Tabelle eintrage er es zählt. (Quasi ein "Betrag von U" ;-))

Alexander


Bild


Betrifft: AW: Für´s Erste mit ParamArray von: Ramses
Geschrieben am: 11.03.2005 09:11:30

Hallo

ersetze die Zeile

If Cell = Kuerzel Then


mit

If UCase(Cell) = UCase(Kuerzel) Then

Gruss Rainer


Bild


Betrifft: Passt..... von: Alexander
Geschrieben am: 11.03.2005 13:00:20

Vielen Dank an Euch beide, klappt wunderbar, komme gerne wieder......

Alexander


 Bild

Beiträge aus den Excel-Beispielen zum Thema "function Bereich"