Spis treści
Kontynuujemy serię poradników dotyczących funkcji zdefiniowanych przez użytkownika. W poprzednich artykułach zapoznaliśmy się z funkcjami niestandardowymi i dowiedzieliśmy się, jak je tworzyć i używać. W tym poradniku przyjrzymy się specyfice korzystania z tych funkcji i zobaczymy różnice między FROM a makrami VBA.
W tym tutorialu dowiemy się następujących rzeczy:
Mamy nadzieję, że ten artykuł poszerzy Twoją wiedzę na temat FROM i pomoże Ci jeszcze efektywniej wykorzystywać je w swoich skoroszytach Excela.
Czy UDF i Makro to to samo?
Zarówno funkcje zdefiniowane przez użytkownika, jak i makra VBA tworzone są za pomocą edytora VBA. Jaka jest między nimi różnica i czemu dać pierwszeństwo?
Najważniejsza różnica polega na tym, że funkcja wykonuje obliczenia, a makro wykonuje jakieś działanie. Funkcja zdefiniowana przez użytkownika, podobnie jak zwykła funkcja Excela, musi być zapisana w komórce. W wyniku jej wykonania komórka zwraca jakąś wartość. Jednocześnie nie ma możliwości zmiany wartości innych komórek, a także niektórych właściwości bieżącej komórki (w szczególności,formatowanie). Można jednak użyć funkcji niestandardowej w formułach formatowania warunkowego.
UDF i makro VBA działają na różne sposoby. Na przykład, gdy tworzysz UDF w edytorze Visual Basic, zaczynasz od stwierdzenia Funkcja i kończą się End Function Kiedy nagrywasz makro, zaczynasz od stwierdzenia Sub i kończą się End Sub.
Nie wszystkie operatory Visual Basic mogą być użyte do tworzenia FROM. Z tego powodu makro jest bardziej uniwersalnym rozwiązaniem.
Makro nie wymaga od użytkownika przekazania żadnych argumentów (ani nie może przyjąć żadnych argumentów), w przeciwieństwie do funkcji zdefiniowanej przez użytkownika.
Chodzi o to, że niektóre polecenia makr mogą wykorzystywać adresy komórek lub elementy formatowania (na przykład kolor). Jeśli przenosisz komórki, dodajesz lub usuwasz wiersze i kolumny, zmieniasz format komórek, to możesz łatwo "zepsuć" swoje makra. Jest to szczególnie możliwe, jeśli udostępniasz plik współpracownikom, którzy nie wiedzą, jak działają twoje makra.
Na przykład masz plik z doskonale działającym makrem.Formuła ta oblicza procenty w komórkach od A1 do A4.Makro zmienia kolor tych komórek na żółty.W aktywnej komórce ustawiony jest format procentowy.
Jeśli Ty lub ktoś inny zdecyduje się wstawić nowy wiersz, makro będzie nadal szukać wartości w komórce A4 (parametr 4,1 w Twoim FROM), nie powiedzie się i zwróci błąd:
W tym przypadku błąd wystąpił z powodu dzielenia przez zero (brak wartości w nowo dodanym wierszu). W przypadku, gdy makro wykonuje, powiedzmy, sumowanie, to po prostu otrzymasz błędny wynik. Ale nie będziesz o tym wiedział.
W przeciwieństwie do makr, funkcje zdefiniowane przez użytkownika nie mogą spowodować takiej nieprzyjemnej sytuacji.
Poniżej widzisz wydajność tych samych obliczeń przy użyciu UDF. Tutaj możesz określić komórki wejściowe w dowolnym miejscu arkusza i nie napotkasz żadnych nieoczekiwanych problemów podczas zmiany.
W C3 napisałem następujący wzór:
=UDF_vs_Macro(A1,A4)
Następnie wstawiłem pusty wiersz, a formuła zmieniła się, jak widać na powyższym zrzucie ekranu.
Teraz możemy przenieść komórkę wejściową lub komórkę z funkcją w dowolne miejsce. Wynik zawsze będzie poprawny.
Dodatkową korzyścią z używania FROM jest to, że automatycznie aktualizują się one, gdy zmienia się wartość w komórce wejściowej. Podczas używania makr należy zawsze upewnić się, że wszystkie dane są aktualne.
Pamiętając o tym przykładzie, wolałbym używać FROMów wszędzie tam, gdzie to możliwe i używać makr tylko do innych działań nieobliczeniowych.
Ograniczenia i wady stosowania UDF
O zaletach UDF wspomniałem już powyżej. Długo by opowiadać, może wykonywać obliczenia, które nie są możliwe do wykonania za pomocą standardowych funkcji Excela. Ponadto może zapisać i wykorzystać długie i złożone formuły, zamieniając je w jedną funkcję. I nie będziesz musiał pisać skomplikowanych formuł w kółko.
Teraz porozmawiajmy bardziej szczegółowo o wadach UDF:
- Tworzenie FROM wymaga użycia VBA.Nie da się tego obejść.Oznacza to,że użytkownik nie może nagrać FROM w taki sam sposób jak makra w Excelu.Musisz sam stworzyć FROM.Możesz jednak skopiować i wkleić do swojej funkcji fragmenty wcześniej nagranego kodu makra.Musisz tylko zdawać sobie sprawę z ograniczeń funkcji niestandardowych.
- Inną wadą UDF jest to, że jak każda inna funkcja Excela może zwrócić tylko pojedynczą wartość lub tablicę wartości do komórki. Po prostu wykonuje obliczenia, nic więcej.
- Jeśli chcesz udostępnić swój skoroszyt współpracownikom, pamiętaj, aby zapisać swoje UDF-y w tym samym pliku. W przeciwnym razie twoje niestandardowe funkcje nie będą dla nich działać.
- Funkcje niestandardowe tworzone za pomocą edytora VBA są wolniejsze niż zwykłe funkcje. Jest to szczególnie zauważalne w dużych tabelach. Niestety VBA jest jak na razie bardzo powolnym językiem programowania. Dlatego jeśli masz dużo danych, staraj się używać funkcji standardowych, gdy tylko jest to możliwe, lub twórz UDF-y za pomocą funkcji LAMBDA.
Ograniczenia funkcji niestandardowych:
- FROMy są przeznaczone do wykonywania obliczeń i zwracania wartości. Nie można ich używać zamiast makr.
- Nie mogą one zmieniać zawartości żadnych innych komórek (tylko aktywnej komórki).
- Nazwy funkcji muszą być zgodne z pewnymi zasadami. Na przykład nie można użyć nazwy, która odpowiada rodzimej nazwie funkcji programu Excel lub adresowi komórki, takiej jak AB123.
- Twoja funkcja niestandardowa nie może zawierać spacji w nazwie, ale może zawierać znak podkreślenia. Jednak preferowaną metodą jest użycie dużych liter na początku każdego nowego słowa (na przykład GetMaxBetween).
- FROM nie może kopiować i wklejać komórek do innych obszarów arkusza.
- Nie mogą one zmienić aktywnego arkusza.
- FROM-y nie mogą zmieniać formatowania w aktywnej komórce. Jeśli chcesz zmienić formatowanie komórki podczas wyświetlania różnych wartości, powinieneś użyć formatowania warunkowego.
- Nie mogą otwierać dodatkowych książek.
- Nie można ich użyć do uruchomienia makr wykorzystujących Application.OnTime.
- Za pomocą rejestratora makr nie można utworzyć funkcji zdefiniowanej przez użytkownika.
- Funkcje nie pojawiają się w Developer> Makra dialog.
- Twoje funkcje pojawią się w oknie dialogowym ( Insert> Funkcja ), a na liście funkcji tylko wtedy, gdy są zadeklarowane jako Publiczna (jest to ustawienie domyślne, chyba że zaznaczono inaczej).
- Wszelkie funkcje zadeklarowane jako Prywatny nie pojawi się na liście funkcji.
Dość powolne działanie, a także pewne ograniczenia w użytkowaniu mogą sprawić, że pomyślisz: "Jaki jest pożytek z tych niestandardowych funkcji?".
Mogą się przydać, i przydają, jeśli pamiętamy o nałożonych na nie ograniczeniach. Jeśli nauczysz się poprawnie tworzyć i używać FROM, możesz napisać swoją bibliotekę funkcji. To znacznie rozszerzy Twoje możliwości pracy z danymi w Excelu.
Jak dla mnie funkcje niestandardowe to duża oszczędność czasu. A co z Wami, czy próbowaliście już tworzyć własne FROM-y? Czy podobały Wam się bardziej niż podstawowe funkcje Excela? Podyskutujmy o tym w Komentarzach :)