Új hozzászólás Aktív témák

  • Fferi50

    Topikgazda

    válasz TrollBalint #25785 üzenetére

    Szia!

    "ettől lehalt az egész excel"
    Igazad van, szégyellem magam miatta, mert ezzel belekergettem egy végtelen ciklusba a függvényt.
    Ezt most kipróbáltam és működik. Magyarázatokat is fűztem hozzá:
    Function munkanapos(ByVal mettol As Date, Optional hanynap As Integer) As Date
    Dim unnepek As Range, munkanap As Date, napi As Range, napok As Date, napjai As Integer
    Set unnepek = Sheet1.Range("G2:G19") 'itt vannak az ünnepnapok és a dolgozós szombatok
    napjai = 0 'nulláról indul a munkanap számláló
    munkanap = mettol
    napok = mettol 'innen indulunk
    Do While napjai <= hanynap 'addig kell a ciklust csinálni, amíg a munkanapok száma eléri a kívánt értéket
    Set napi = unnepek.Find(what:=napok, LookIn:=xlValues, lookat:=xlWhole) ' benne van-e az ünnep listában a dátumunk
    If Not napi Is Nothing Then ' ha benne van a listában a dátumunk
    If Application.Weekday(napok, vbMonday) = 6 Then ' és az szombat, akkor ez munkanap
    munkanap = napok ' tehát visszatérési érték lehet
    napjai = napjai + 1 'növeljük a munkanap számlálót
    End If
    Else 'ha nincs benne a listában a dátum
    If Application.Weekday(napok, vbMonday) < 6 Then ' és nem szombati nap
    munkanap = napok 'akkor lehet visszatérési érték
    napjai = napjai + 1 ' növeljük a munkanap számlálót
    End If
    End If
    napok = napok + 1 ' növeljük a dátumunkat egy nappal
    Loop 'és folytatjuk a ciklust
    munkanapos = munkanap ' ha vége a ciklusnak, akkor a munkanap változó aktuális értékét kell visszaadni
    End Function

    Nem probléma a kérdés - akkor sem, ha több van. Viszont jónéhányra a VBA help-ben megtalálod a választ.
    Pl. Range.Find paramétereinek a magyarázata (illetve egyáltalán a nevesített paraméterek használata).
    Szerintem nem úszod meg, hogy alaposan átnézd legalább a VBA help átlalános részét.
    Az unnepekben mint írtam, benne vannak a nem munkaszüneti nap szombatok is.
    Ezért kell mindkét ágat használni.
    If not = magyarul "ha nem" (not ugye a logikai tagadás). Tehát az adott helyen, ha nem semmi(üres) a napi változó értéke - azaz talált a keresés egy olyan napot a listában. Keresésnél ezt a formulát érdemes alkalmazni, mert így nem fogsz hibát kapni.
    Ha egyből a keresés eredményével akarnál dolgozni - pl. az abban levő dátumot szeretnéd megtudni, akkor hibaüzenetet kapsz. Van még egy csomó ilyen finomság, amit kb.20 év alatt sikerült összeszednem és még mindig tanulok új dolgokat.
    A Weekday a nap számát adja vissza valóban, de hogy melyik napot tekinti a hét első napjának, az a második paraméterétől (ami itt vbMonday) függ.
    A növelés logikáját szerintem megérted a makróból.

    Üdv.

Új hozzászólás Aktív témák