NETWORKDAYS tablicowo   strona główna:
A po co ten Excel ;-)
 
Każdy zaintresowany funkcję zna więc pominę tu opis jej zastosowania wspominając jedynie to co istotne z punktu widzenia VBA.  
 
Excel 2003: funkcja ta należy do dodatku Analysis ToolPak 
  Excel 2003: NETWORKDAYS
                 i chcąc jej używać trzeba go załadować.   
                Jednak żeby używać tej funkcji w VBA trzeba dodać   
                też owy dodatek dla VBA (Narzedzia/Dodatki/   
                Analysis ToolPack - VBA)  
                Jak również referencję (VBE/Tools/References) do  
                bibliotek: funcres i atpvbean.xls  
                W VBA używamy funkcji tego dodatku podając po prostu  
                nazwę danej funkcji: np.:  
          tblWyniki(i, 1) = NETWORKDAYS(…  
 
Excel 2007: nie ma już oddzielnego dodatku dla tej funkcji. Nie potrzebujemy zatem dodatkowych referencji a do samej funkcji odwołujemy się  
                poprzez obiekt Application tj.  
          tblWyniki(i, 1) = Application.NETWORKDAYS(…  
 
Excel 2010: jeżeli chodzi o VBA to nic się nie zmieniło. Jedynie arkuszowa nazwa funkcji się zmieniła na polską :-) I teraz mamy DNI.ROBOCZE   Excel 2010: DNI.ROBOCZE
 
 
 
Ale my nie o tym… kiedyś nie zwróciłbym na to uwagi ale… sporym ograniczeniem tej funkcji jest fakt że nie działa tablicowo. Np.:  
    Dane mamy takie… w kol.D wyniki dla funkcji DNI.ROBOCZE (NETWORKDAYS) - tu tylko demonstracyjnie.  
 
A B C D E F  
1 data OD data DO war =DNI.ROBOCZE(A2;B2;$F$2:$F$7) Święta  
2 2011-01-01 2011-01-20 test1 13   2011-01-01  
3 2011-01-02 2011-01-20 test2 13   2011-01-06  
4 2011-02-02 2011-02-20 test1 13   2011-04-24  
5 2011-02-03 2011-02-20 test2 12   2011-04-25  
6 2011-03-04 2011-03-20 test1 11   2011-05-01  
7 2011-03-06 2011-03-20 test2 10   2011-05-03  
8 2011-04-07 2011-04-20 test1 10      
9 2011-04-08 2011-04-20 test2 9      
10 2011-05-09 2011-05-20 test1 10      
11 2011-05-10 2011-05-20 test2 9      
12 2011-06-11 2011-06-20 test1 6      
13 2011-06-12 2011-06-20 test2 6      
               
 
Chcielibyśmy policzyć sumę dni roboczych dla poszczególnych miesięcy dla test1 i test2. Z kol.D zadanie dość łatwe  
 
20   test1 test2  
21 01.2011 13 13  
22 02.2011 13 12  
23 03.2011 11 10  
24 04.2011 10 9  
25 05.2011 10 9  
26 06.2011 6 6  
 
kom.B21  
=SUMA.ILOCZYNÓW((TEKST($A$2:$A$13;"mm.rrrr")=$A21)*($C$2:$C$13=B$20)*($D$2:$D$13))  
 
Jednak czasem nie można wykorzystać dodatkowej kolumny, a zapis, zamiast ostatniego nawiasu   
...*(DNI.ROBOCZE($A$2:$A$13;$B$2:$B$13;$F$2:$F$7))  
zwraca #ARG! :-) i z tym chcemy walczyć ;-)  
 
Function tblNetWorkDays(rngStartDates As Excel.Range, _  
                        rngEndDates As Excel.Range, _  
                        Optional rngHolydays As Variant) As Variant  
                          
    Dim tblD1 As Variant, tblD2 As Variant, i As Long  
    Dim tblWyniki() As Variant  
      
    tblD1 = rngStartDates: tblD2 = rngEndDates  
    ReDim tblWyniki(1 To UBound(tblD1), 1 To 1)  
      
    For i = 1 To UBound(tblD1)  
        tblWyniki(i, 1) = Application.NetworkDays( _  
                            tblD1(i, 1), _  
                            tblD2(i, 1), _  
                            IIf(IsMissing(rngHolydays), _  
                                Null, _  
                                rngHolydays))  
    Next  
      
    tblNetWorkDays = tblWyniki  
End Function  
 
i teraz formuła..  
=SUMA.ILOCZYNÓW((TEKST($A$2:$A$13;"mm.rrrr")=$A21)*($C$2:$C$13=B$20)*tblNetWorkDays($A$2:$A$13;$B$2:$B$13;$F$2:$F$7))  
działa zgodnie z moimi oczekiwaniami. :-)  
 
Temat (choć ze starszą wersją funkcji - bez świąt) z przykładami…  
http://www.excelforum.pl/topics1/ilosc-numberow-w-miesiacu-vt18776.htm