(Odpowiedź tutaj jako osobne pytanie dla posortowanych danych).
Jeśli dane były sortowane, można użyć VLOOKUPz range_lookupargumentem TRUE(lub jest pominięty, ponieważ jest to ustawienie domyślne), która jest oficjalnie opisany dla programu Excel jako „szukaj przybliżonej meczu”.
Innymi słowy, dla posortowanych danych:
- ustawienie ostatniego argumentu tak, aby
FALSEzwracał pierwszą wartość, oraz
- ustawienie ostatniego argumentu w celu
TRUEzwrócenia ostatniej wartości.
Jest to w dużej mierze nieudokumentowane i niejasne, ale datuje się na VisiCalc (1979), a dziś ma co najmniej w Microsoft Excel, LibreOffice Calc i Arkuszach Google. Jest to ostatecznie spowodowane początkową implementacją LOOKUPw VisiCalc (i stamtąd VLOOKUPi HLOOKUP), kiedy nie było czwartego parametru. Wartość znajduje się w wyszukiwaniu binarnym , z wykorzystaniem włączonej lewej granicy i wyłącznej prawej granicy (wspólna i elegancka implementacja), co powoduje takie zachowanie.
Technicznie oznacza to, że wyszukiwanie rozpoczyna się od przedziału kandydującego [0, n), gdzie njest długość tablicy, a warunkiem niezmiennym dla pętli jest to, że A[imin] <= key && key < A[imax](lewa granica to <= cel, prawa granica, która zaczyna się po końcu, to: > cel; w celu sprawdzenia poprawności albo sprawdź wartości w punktach końcowych przed, albo sprawdź wynik po), a następnie dzielenie na sekcje i wybranie dowolnej strony zachowuje ten niezmiennik: wykluczając jedną ze stron, dopóki nie dojdziesz do przedziału z 1 terminem [k, k+1), a algorytm następnie zwraca k. To nie musi być dokładne dopasowanie (!): To tylko najbliższe dopasowanie od dołu. W przypadku zduplikowanych dopasowań powoduje to zwrócenie ostatniego dopasowania, ponieważ wymaga, aby następna wartość była większaniż klucz (lub koniec tablicy). W przypadku duplikatów trzeba pewne zachowania, a to jest rozsądne i łatwe do wdrożenia.
To zachowanie jest wyraźnie określone w starym artykule z bazy wiedzy Microsoft Knowledge Base (wyróżnienie dodane): „XL: Jak zwrócić pierwszy lub ostatni wynik w tablicy” ( Q214069 ):
Możesz użyć funkcji WYSZUKAJ (), aby wyszukać wartość w tablicy posortowanych danych i zwrócić odpowiednią wartość zawartą w tej pozycji w innej tablicy. Jeśli wartość wyszukiwania jest powtarzana w obrębie tablicy, zwraca ostatnie napotkane dopasowanie . To zachowanie dotyczy funkcji WYSZUKAJ.PIONOWO (), WYSZUKAJ.PIONOWO () i WYSZUKAJ ().
Poniżej przedstawiono oficjalną dokumentację niektórych arkuszy kalkulacyjnych; nie podano też zachowania „ostatniego dopasowania”, ale jest to sugerowane w dokumentacji Arkuszy Google:
Microsoft Excel
PRAWDA zakłada, że pierwsza kolumna w tabeli jest posortowana numerycznie lub alfabetycznie, a następnie wyszuka najbliższą wartość .
Arkusze Google :
Jeśli is_sortedjest TRUElub zostało pominięte, zwracane jest najbliższe dopasowanie ( mniejsze lub równe kluczowi wyszukiwania)