Mam nadzieję, że jeszcze raz tu zajrzysz.
Dam odpowiedź, gdzie nie jest potrzebny VBA i postaram się wyjaśnić wszystko.
Korzystając z udostępnionego zdjęcia, utworzyłem własny arkusz:
zaczynamy od tego, który element jest najwyższy. Po prostu to zrobi.
Nie ma tu wiele do wyjaśnienia.
F2
=A2
Co G2
przychodzi =IF(LEN(F2),INDEX(B:B,MATCH(F2,A:A,0)),"")
. Wiedząc, że druga kolumna będzie zawsze taka sama jak w pierwszej kolumnie, po prostu wyszukuje dokładne dopasowanie F2
w zakresie A:A
( MATCH
) i wypisuje wszystko, co jest w B:B
tym samym wierszu. (Zatrzymuje się przy pierwszym znalezionym elemencie, chociaż nie ma to znaczenia, ponieważ jest tak samo). LEN
zapobiega tylko wyświetlaniu go, #NA
jeśli łańcuch wyszukiwania jest pusty, a także pomija obliczenia całej tablicy.
Co H2
przychodzi co sugested =IF(LEN(F2),SUMIF(A:A,F2,C:C),"")
. Po prostu sumuje wszystkie wartości w kolumnie, C
które mają podaną wyszukiwarkę w kolumnie A
. LEN
-Part jest taki sam jak ten na G2
natomiast nie pokazuje się błąd, to pop 0
. Jednak nadal otrzymasz zero, jeśli istnieje termin serch, a suma jest 0
.
Chociaż możesz po prostu automatycznie wypełniać G2
i H2
zmniejszać tyle, ile potrzebujesz, nie zadziała F2
. Ale możesz to zrobić za pomocą następującej formuły w F3
:
=IF(LEN(F2),IFERROR(INDEX(A:A,MATCH(1,(COUNTIF(F$2:F2,A$2:A$1000)=0)*(A$2:A$1000<>""),0)+1),""),"")
Jest to formuła tablicowa, którą należy potwierdzić za pomocą Ctrl+ Shift+ Enter.
Zaczyna się od COUNTIF
tego, że po prostu zwraca tablicę binarną, podczas gdy każdy element otrzymuje a, 1
jeśli pasuje do dowolnego ciągu wyszukiwania, wszystkie inne otrzymują 0
(wyszukiwanie wszystkich ciągów powyżej siebie F$2:F2
). Ponieważ nie chcemy dostać już używanego przedmiotu, obracamy wszystko 0
TRUE
( =0
). Nie chcemy też empty
przedmiotu, więc też go sprawdzamy ( A$2:A$1000<>""
). Mnożenie 2 tablic boolowskich jest tym samym, co posiadanie AND
dla każdej pary elementów, podczas gdy użycie wartości rzeczywistej AND
sprawdzi, czy wszystkie elementy w tablicach boura mają być TRUE
. Jednak ponowne pomnożenie daje nam tablicę binarną zawierającą 1
w każdym elemencie, który nie jest pusty i nie jest używany. MATCH
teraz sprawdza pierwszy1
i zwraca swój numer pozycji (wiersz). Ale począwszy od drugiego rzędu daje nam przesunięcie, które jest zerowane +1
. Posiadanie pozycji INDEX
daje nam ciąg, którego potrzebujemy. IFERROR
dotyczy tylko pierwszego empty
rozwiązania, które powróci #NA
. I po LEN
prostu pomija obliczenia dla wszystkich komórek po pierwszym pustym.
Korzystanie z kreatora formuł, aby zobaczyć, co tak naprawdę oblicza, pomaga również zrozumieć. Ale zawsze dwukrotnie sprawdź wszystkie $
lub automatyczne wypełnianie może się nie powieść.
Jeśli nadal musisz o coś zapytać, po prostu napisz komentarz. :)