Jak mogę przeprowadzić dwuwymiarowe wyszukiwanie, gdy nagłówki kolumn i wierszy są zakresami?

0

Mam arkusz kalkulacyjny, który ma tabelę o strukturze podobnej do tej:

      | 1-2 | 3-4 | 5-6 | 7+
-------------------------------
18-20 |  7  |  2  |  9  |  4  |
21-25 |  1  |  0  |  6  |  3  |
26-30 |  1  |  4  |  6  |  9  |
31+   |  3  |  8  |  5  |  0  |

Powiedzmy na przykład, że dane wejściowe, które otrzymałem od użytkownika 2, 19, powinny zostać zwrócone 7. Lub jeśli dane wejściowe byłyby 9, 29, wyszukiwanie powinno wrócić 9.

Wiem, że możesz wykonywać wyszukiwanie dwuwymiarowe, gdy masz tylko pojedyncze wartości w nagłówkach wierszy i kolumn, łącząc VLOOKUPi MATCH. Ale jak mam sprawdzić, kiedy nagłówki mają zakres wartości?

Czy muszę po prostu napisać niestandardową funkcję VBA, czy Excel ma jakiś wbudowany sposób, aby to zrobić?

Lews Therin
źródło

Odpowiedzi:

1

INDEX()potrafi wykonać dwuwymiarowe wyszukiwanie. Składnia jest następująca INDEX(array,row_num,[col_num],[area_num]). Pobiera tablicę 2D i zwraca przecięcie numer_wiersza i numer_kolumny.

Twój problem jest nieco trudny ze względu na zakresy w nagłówkach, ale pewna szybka praca nóg przy TRUNC()i IF()wykonuje pracę. Ta formuła wypełniona z D8 na zrzucie ekranu poniżej przedstawia pokazane wyniki:

=INDEX(B$2:E$5,IF(C8>31,4,TRUNC((C8-11)/5)),IF(B8>7,4,TRUNC((B8+1)/2)))

wprowadź opis zdjęcia tutaj

Jeśli chcesz zobaczyć, jak TRUNC()działa porcja, umieść =TRUNC((ROW()-11)/5)w wierszu 18 lub TRUNC((ROW()+1)/2)w wierszu 1 i wypełnij.

Mam nadzieję, że to pomoże i powodzenia.

Bandersnatch
źródło
0

Biorąc pod uwagę, że szukasz zakresów, które wzajemnie się wykluczają i są kompletne (przynajmniej dla wartości> = 18), twój zakres może być zdefiniowany przez pierwszą wartość w każdej komórce. Na przykład podana tabela może zostać opisana równorzędnie przez:

wprowadź opis zdjęcia tutaj

Następnie możesz znaleźć swoją wartość, łącząc vlookup i match. Na przykład, jeśli tabela i wartości odnośników były ułożone w następujący sposób:

wprowadź opis zdjęcia tutaj

Żądana wartość znajdowałaby się w podświetlonej komórce, która zawierałaby następujące elementy: = WYSZUKAJ.PIONOWO (8 $, 1 $ A $: 5 $ E $, MATCH (A8, $ A $ 1: $ 1,1 E $), PRAWDA)

AlRacoon
źródło
1
Prawdopodobnie OP ma zakresy w swoich nagłówkach z jakiegoś powodu i chciałby je tam utrzymywać. Ale dobra robota przy użyciu MATCH typu 1 i VLOOKUP () z przybliżonym dopasowaniem do obsługi przypadków, gdy wartość wyszukiwania jest poza zakresem.
Bandersnatch
@Bandersnatch Thanks. Podobało mi się również twoje podejście. Gdybym go zobaczył, zanim opublikowałem odpowiedź, najprawdopodobniej nie napisałbym. Trudność polega na tym, że OP musiałby wykonać obliczenia i zagnieżdżać, jeśli instrukcje byłyby, gdyby było więcej zakresów, które nie byłyby o równoważnej wielkości. W każdym razie myślę, że jedno lub oba z tych podejść mogłyby być wykorzystane przez PO, w zależności od ich okoliczności.
AlRacoon
0

Ponieważ etykiety są dobrze uformowane, co w przypadku etykiet oznacza w zasadzie, że są uporządkowane tak, jakby zostały posortowane od najniższej do najwyższej według kodów znaków pierwszych znaków, można skorzystać z ostatniego argumentu w WYSZUKAJ.PIONOWO () i HLOOKUP (), wybierając opcję „dopasowanie przybliżone”.

Robisz to, aby utworzyć wartość wyszukiwania i kolumnę, aby wyszukać funkcję WYSZUKAJ.PIONOWO (), która wykona końcową pracę.

Na koniec masz prostą WYSZUKAJ.PIONOWO (). Co na to spojrzeć? Powiedzmy, że twoja tabela pokazuje A1: E5 z etykietami wierszy w A2: A5 (NIE dołączaj tego pierwszego wiersza!) I etykietami kolumn w B1: E1 (NIE dołączaj tej pierwszej kolumny!), A rzeczywistymi danymi w B2 : E5. Jeśli uwzględnisz te pierwsze wiersze i kolumny (A1), pojawi się błąd # Nie dotyczy. Załóżmy, że sam radzisz sobie z uzyskiwaniem wartości wejściowych, więc jednak tworzony jest materiał „2, 19”, ale jest on udostępniany (nazywam to „Kolumną do patrzenia” i „Wierszem do patrzenia”.) :

=HLOOKUP( "Row to look in" , A1:A5 , 1, TRUE )

zwróci „18-20”, którego użyjemy bezpośrednio jako wartości wyszukiwania, oraz

=VLOOKUP( "Column to look in" , A1:E1 , 1 , TRUE )

zwróci „1-2” i tutaj pojawia się „drobna sztuczka”.

Jeśli zawiniemy tę ostatnią funkcję w funkcję MATCH (), użyje „1-2”, aby znaleźć numer kolumny do wyszukania, w której wymagana jest ostatnia funkcja WYSZUKAJ.PIONOWO (). (Anonimowa osoba w witrynie UserVoice programu Excel pokazała mi to.)

Musisz teraz użyć zakresu, którego właśnie unikaliśmy, A1: E1, aby uzyskać numer kolumny bezpośrednio. Jeśli zaczniesz od B1, musisz dodać „1” do wyniku, więc łatwiej jest to odczytać i zrozumieć:

=MATCH(  VLOOKUP( "Column to look in" , A1:E1 , 1 , TRUE )  , A1:E1 )

która zwraca „2” dla kolumny (przypadkowo, nic więcej, to samo co nasze dane wejściowe, ale nie dopuszczaj do zamieszania w grze!). Wreszcie poskładasz to wszystko jako:

=VLOOKUP( HLOOKUP( "Row to look in" , A1:A5 , 1, TRUE ) , A1:E5 , MATCH( VLOOKUP( "Column to look in" , A1:E1 , 1 , TRUE ) , A1:E1 ) , FALSE )

Użyj do tego „FAŁSZ”, ponieważ albo masz dokładne dopasowania, albo coś poszło nie tak.

(Jeśli tylko kolumny lub tylko rzędy są podatne, nadal możesz się tutaj dostosować. Masz tylko trudniejszy czas, ponieważ tylko połowa z tego jest rozwiązana, ale to wystarczy, znalazłem. Użyłem go może 6-8 razy, odkąd nauczyłem się MATCH (), aby odzyskać nagłówki wierszy / kolumn jako funkcję Etykiet, a połowa z nich była tylko „ruly”.)

Roy
źródło
(1) Byłoby nieco pomocne, gdybyś wyraźnie określił warunki, w których etykiety zakresu są lub nie są dobrze uformowane, i podał przykład etykiet, które nie są dobrze uformowane. (2) Czy możesz wyjaśnić nieco dokładniej, jak radzić sobie z źle sformułowanymi etykietami?
Scott