ADR.POŚR i zakresy zdefiniowane.   strona główna:
A po co ten Excel ;-)
 
Mamy takie dane:  
 
  A B C D E F G H I J K  
1 73,17 98,16 96,6 74,65 92,64   93,23 91,32 99,95 97,49 78,88  
2                        
3 31,45 31,59 89,95 8,56 17,78   65 50,93 99,95 24,52 15,97  
4 47,33 98,16 36,53 74,65 14,77   22,04 25,17 30,57 97,49 27,89  
5 50,87 16 77,76 59,4 48,18   32,4 81,82 61,14 20,54 78,88  
6 62,13 49,21 13,28 1,83 24,65   93,23 61,62 58,45 86,88    
7 73,17 51,29 51,86 4,63 92,64   16,67 91,32 47,39 64,03    
8 41,75 94,24 96,6 43,75 73,24     24,09   80,43    
9 63,57 59,56 17,78 67,3 24,9     64,17   39,6    
10 35,35 80,63 89,85 47,62 42,4     26,22        
11               16,7        
12               39,08        
13                        
 
    Naszym zadaniem jest wpisać w wierszu 1 maximum z zakresu danych dla danej kolumny jednak w trochu inny  
sposób. Mam podefiniowane zakresy w następujący sposób..  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a więc:  
 - dane z kolumn A do E mają przypisane odpowiednio nazwane zakresy kol.1 (A3:A10), kol.2 (B3:B10) itd.   Tworzenie dynamicznego zakresu nazwanego w arkuszu
 - dane z kolumn G do K również.. Kol.7, Kol.8, … jednak te zakresy są dynamiczne..  
.. po prostu do określenia ostatniego wiersza uzyłem f.Last a nie standardowo ILE.NIEPUSTYCH   
 
Function Last(rng As Excel.Range) As Long  
' wg. Ron de Bruin, 20 Feb 2007  
' http://www.rondebruin.nl/last.htm  
    On Error Resume Next  
    Last = rng.Find(What:="*", _  
                    After:=rng.Cells(1), _  
                    Lookat:=xlPart, _  
                    LookIn:=xlFormulas, _  
                    SearchOrder:=xlByRows, _  
                    SearchDirection:=xlPrevious, _  
                    MatchCase:=False).Row  
    On Error GoTo 0  
End Function  
 
No i określmy max dla danego zakresu posługując się zdefiniowanymi zakresami.. Wystarczy dla kom.A1 formuła  
=MAX(kol.1) i zadziała :-) Jednak chcielibyśmy umożliwić przeciągnięcie takiej formuły na następne kolumny..  
zmienny parametr to =MAX(kol.1) .. No własnie ta jedynka. Nic prostszego:   
=MAX(ADR.POŚR("kol." & NR.KOLUMNY(A:A)))  
Działa :-) jednak tylko w zakresie kolumn A:E a więc tam gdzie zdefiniowane zakresy są stałe. Jeżeli tekst nazwy  
odwołuje się do zakresu dynamicznego formuła NIE DZIAŁA!! Zwracając błąd: #ADR!  Co na to poradzić?  
Na dobrą sprawę nie wiem co jest przyczyną błędu. Przykłąd wg mnie jest na tyle jesny że ze sporą pewnścią  
można stwierdzić że jest to jakiś wyjątek w działaniu ADR.POŚR. Przyczyny jednak nie znam.  
     Jak zwykle "czego się nie da formułami"..   
 
Function ADRPOŚR(strNameText As String) As Excel.Range  
    Set ADRPOŚR = Application.Evaluate(ThisWorkbook.Names(strNameText).RefersTo)  
End Function  
  dla chcących poszerzyć temat:
i formuła:  
=MAX(ADRPOŚR("kol." & NR.KOLUMNY(G:G)))   Daily Dose of Excel
INDIRECT and Dynamic Ranges
zwraca już poprawne wyniki.  
 
 
  Przykład do pobrania
  adrposr.zip