Makra to zarówno procedury jak i funkcje, które specjalnie przez nas zaprogramowane mogą zastępować funkcje Excela. Dzięki znajomości VBA można tworzyć funkcje wzbogacone o mechanizmy, które potrzebne są konkretnie dla Twojego przypadku. W tym przykładzie stworzę funkcję, która dzięki pętli For Each stanie się funkcją WYSZUKAJ.PIONOWO PRO.
Jak stworzyć funkcję, która znajdzie wszystkie pasujące wystąpienia zamiast jednego tak jak to jest w przypadku WYSZUKAJ.PIONOWO? Mam sytuację, w której chciałbym zebrać wszystkie adresy mailowe przypisane konkretnej firmie do jednej komórki.
Otwieram edytor VBA i wstawiam nowy moduł. Funkcja zaczyna się od słowa Function i nazwy, a także argumentów, które będą podawane przez użytkownika przy jej wykorzystywaniu.
Dodaje argumenty Firma i Zakres, a także nadaję im typy jakie będą przyjmowały. Funkcja zwróci mi wynik typu String.
Aby skorzystać z pętli For Each deklaruję zmienną, która będzie obiektem przechodzącym w pętli po wskazanym zakresie.
Aby wyłącznie adresy, które pasują do wybranej firmy muszę dodać instrukcję warunkową, która sprawdzi, czy wartość komórki zgadza się z wartością argumentu Firma.
Teraz formuła wynikowa, czyli nazwa funkcji która będzie zwracała pobrane adresy e-mail. Z uwagi na to, że jest to pętla to przy każdym przejściu i dopasowaniu zawartości komórki z argumentem Firma wynik powinien się powiększać o kolejną wartość pobraną z komórki obok. Dlatego też formuła oprócz pobrania wartości z komórki obok będzie zachowywała wartość z poprzedniego przejścia. Dodam jeszcze średnik ze spacją, aby adresy były od siebie oddzielone.
Na koniec muszę pozbyć się średnika i spacji z początku mojej zwróconej wartości więc użyję funkcji tekstowej MID.
Całe makro wygląda tak:
A poniżej efekt jego działania.
Jeśli chcesz zobaczyć w jaki sposób tworzę to makro na filmie to sprawdź na YT: