Hirdetés

Keresés

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

  • azopi74

    addikt

    válasz TrollBalint #25744 üzenetére

    "Az első feladat, amivel most szenvedek, az annyi lenne, hogy egy dátumtól számolva a paraméterben megadott számnyi munkanapot leszámol és azt a dátumot adja vissza. Viszont ha ezen túl vagyok lesz olyan is, hogy két dátum között kell kiszámolni a munkanapok számát."

    De minek kell ehhez makró? :)
    Ha úgyis már megvannak a típusok naptári naponként nézve egy táblában, akkor, (ha ezt a táblát pl elnevezed DayType-nak, a napot Day-nek, a típust Type-nak, és csinálsz egy plusz mezőt (WorkDayCum) az adott napig eltelt munkanapok számának meghatározására így : =COUNTIFS([Type],"Workday",[Day],"<="&[@Day])

    Ekkor a két dátum (Kezdodatum, ZaroDatum) közti munkanapok száma:

    =COUNTIFS(DayType[Type],"Workday",DayType[Day],">="&mnapkalk[@KezdoDatum],DayType[Day],"<"&mnapkalk[@ZaroDatum])

    relációs jeleket tetszőlegesen állítsd, attól függően, hogy az első és utolsó napokat bele akarok számítani

    Az adott napra (KezdoDatum) rászámolt munkapok (mnapok) pedig:

    =INDEX(DayType[Day],MATCH(VLOOKUP([KezdoDatum],DayType,3,0)+[mnapok],DayType[WorkDayCum],0),1)

    Valahogy így

    Tömbfüggvénnyel persze segédoszlop nélkül is megoldható, mint minden, csak az már egy kicsit szofisztikáltabb megoldás lenne :D

  • Fferi50

    Topikgazda

    válasz TrollBalint #25744 üzenetére

    Szia!

    A #25749 hozzászólásomban levő függvény nem teljesen jó sajnos, mert nem a munkanapokat számolja, hanem csak a napokat. Javítottam, ezt próbáld meg légy szíves:

    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")
    napjai = 0
    munkanap = mettol
    Do While napjai <= hanynap
    napok = mettol + napjai
    Set napi = unnepek.Find(what:=napok, LookIn:=xlValues, lookat:=xlWhole)
    If Not napi Is Nothing Then
    If Application.Weekday(napok, vbMonday) = 6 Then
    munkanap = napok
    End If
    Else
    If Application.Weekday(napok, vbMonday) < 6 Then
    munkanap = napok
    End If
    End If
    napjai = napjai + 1
    Loop
    munkanapos = munkanap
    End Function

    Üdv.

  • Fferi50

    Topikgazda

    válasz TrollBalint #25744 üzenetére

    Szia!

    A következőt javaslom:
    A Settings munkalap G oszlopa alá írd még be a H oszlopban levő adatokat ís.
    Ezután írd be a következő függvényt a module1-be:

    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
    Set unnepek = Sheet1.Range("G2:G19")
    munkanap = mettol
    If hanynap = 0 Then hanynap = 0
    For napok = mettol To mettol + hanynap
    Set napi = unnepek.Find(what:=napok, LookIn:=xlValues, lookat:=xlWhole)
    If Not napi Is Nothing Then
    If Application.Weekday(napok, vbMonday) = 6 Then
    munkanap = napok
    End If
    Else
    If Application.Weekday(napok, vbMonday) < 6 Then
    munkanap = napok
    End If
    End If
    Next
    munkanapos = munkanap
    End Function

    A függvény megmondja, hogy a kezdő dátumtól (meddig) a megadott napokkal (hanynap) később melyik lesz a munkanap.
    Ez működik cellában meghívva is (csak a cellaformátumot kell dátumra állítani).

    Üdv.

    (A makróddal kapcsolatban szerintem majd írok privit, ha neked is megfelel.)

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