Definiowanie zawartosci zakresu poza tablicą   strona główna:
A po co ten Excel ;-)
 
 
 
    Choć dział jest przeznaczony dla funkcji użytkownika pozwolę sobie wstawić tu tę procedurę. Powodem jest jej przeznaczenie   Tworzenie formuły tablicowej Obliczanie wielu wyników
którym jest ukrywanie niechcianych błędów zwracanych przez formuły tablicowe zwracające wyniki do zakresu komórek.  
 
    Procedurę tą napisałem na potrzeby art. nt. unikatów gdzie również można przeglądnąć kilka przykładów jej wykorzystania oraz  
technik alternatywnych.   Unikaty
 
    Jeszcze raz nt. zastosowania procedury:  
Powiedzmy że naszym zadaniem było napisanie funkcji arkuszowej zwracającej tablicę wyników i taką już mamy, ale..  
Wprowadzając ją do zakresu komórek arkusza powstaje pytanie: Jaki zakres wskazać/przeznaczyć na wyniki zwrócone przez naszą  
funkcję?  
   • Jeżeli zakres będzie zbyt mały – zostanie zwrócona tylko część tablicy  
   • Jeżeli zakres będzie „w sam raz” też źle – gdy zmienią się dane tak że zostanie utworzona tablica o większej ilość elementów  
     tablica się „nie zmieści”.  
   • Zakres większy niż tablica    
No właśnie trzeba przeznaczyć zakres z "zapasem" jednak funkcja w zakresie poza tablicą zwróconą przez funkcję zwróci błąd #N/D!  
Zadaniem poniższej procedury jest pozbycie się właśnie tego błędu.  
 
Public Sub DefiniowanieZawartosciZakresuPozaTablica( _   
       tbl As Variant, _   
       w As Long, k As Integer, _   
       Optional vArg As Variant = vbNullString)   
 
    Dim nowaTbl() As Variant   
    Dim minW As Long, maxW As Long   
    Dim minK As Integer, maxK As Integer   
    Dim i As Long, j As Integer   
 
    minW = LBound(tbl, 1): maxW = UBound(tbl, 1)   
    minK = LBound(tbl, 2): maxK = UBound(tbl, 2)   
 
    If maxW <= w Or maxK <= k Then   
        ReDim Preserve nowaTbl(minW To w, minK To k)   
        For i = minW To w   
            For j = minK To k   
                If i > maxW Or j > maxK Then   
                    nowaTbl(i, j) = vArg   
                Else   
                    nowaTbl(i, j) = tbl(i, j)   
                End If   
            Next   
        Next   
        tbl = nowaTbl   
    End If   
End Sub   
 
Procedura dostosowuje tablicę podaną w arg. tbl procedury do zadanych wymiarów (w,k).  
Zadanie jest realizowane poprzez utworzenie nowej tablicy (nowaTbl) do której przepisywane są dane z tbl a poza danymi z tbl  
nowaTbl jest uzupełniana wartością arg. vArg (domyślnie vbNullString)  
 
Procedurę z naszej funkcji należy wywołać podając wymiary do jakich ma być "poszerzona" tablica zwracana przez naszą funkcję  
Ale przecież te wymiary określa zakres jaki przeznaczyliśmy na wyniki naszej funkcji. Jak więc pobrać wymiary zakresu przeznaczo-  
nego na te wyniki? Tu z pomocą przychodzi nam Application.Caller  
W naszej funkcji wywołujemy zatem tę procedurę poleceniem  
 
DefiniowanieZawartosciZakresuPozaTablica tblWyniki, _  
                                         Application.Caller.Rows.Count, _  
                                         Application.Caller.Columns.Count, _  
                                         0  
 
Poza tablicą zostaną zwrócone zera. Pominięcie ostatniego param. Procedury spowoduje że poza tablicą komórki pozostaną puste.  
 
    Alternatywną techniką jest np.: nadanie formatowania warunkowego które sprawdzi czy w danej komórce zwracany jest błąd.  
Jeżeli tak czcionce w danej komórce na zostać nadany kolor odpowiadający kolorowi wypełnienia komórki.