Przeglądając blogi tematyczne, natknąłem się na wpis dotyczący różnicy pomiędzy funkcją arkuszową USUŃ.ZBĘDNE.ODSTĘPY (z ang. TRIM), a funkcją VBA o takiej samej nazwie.
Funkcje z Taką Samą Nazwą
Nie chcę się tutaj znęcać nad spolszczeniem, pomimo tego, że TRIM stanowi akurat najbardziej jaskrawy przykład złego tłumaczenia.
Temat mnie zainteresował, bo pamiętam jak porównywałem ze sobą funkcje zaokrąglające w Excelu i VBA. Tam też okazało się, że funkcje ROUND mimo tej samej nazwy, stosują nieco inne algorytmy zaokrąglające.
ROUND w wersji arkuszowej zaokrągla cyfrę 5 w górę, natomiast ROUND w wersji VBA stosuje tzw. algorytm bankierski. Polega on na tym, że funkcja zaokrągla cyfrę 5 w górę lub dół, zależnie od tego czy cyfra poprzedzająca piątkę jest parzysta lub nieparzysta.
Zamierzona Niekonsekwencja?
Wydaje się, że w tym przypadku mamy podobny problem. Można to postrzegać przez pryzmat niekonsekwencji programistów Microsoftu, bo skoro funkcja nazywa się tak samo w Excelu i VBA to powinna także działać tak samo.
Prawa jest jednak taka, że te funkcje mają inną genezę pochodzenia i nie powinniśmy ich ze sobą porównywać.
Kasacja Zbędnych Spacji
Możemy w kodzie wykorzystać wbudowaną funkcję VBA, jak i funkcję arkuszową USUŃ.ZBĘDNE.ODSTĘPY. Tak samo jak robiliśmy to w przypadku funkcji zaokrąglającej ROUND.
Funkcja arkuszowa TRIM jest lepsza ponieważ usuwa wszystkie nadmiarowe spacje w trzech przypadkach (początek, koniec, spacje między wyrazami). Funkcja VBA usuwa zbędne spacje tylko na początku i na końcu ciągu tekstowego.
Aby zobrazować problem napisałem dwie bardzo proste funkcje. Pierwsza działa w oparciu o wbudowaną funkcję VBA, druga w oparciu o funkcję arkuszową USUŃ.ZBĘDNE.ODSTĘPY.
Function Odstepy_VBA(sTekst As String) As String
Odstepy_VBA = Trim(sTekst)
End Function
Function Odstepy_Excel(sTekst As String) As String
Odstepy_Excel = WorksheetFunction.Trim(sTekst)
End Function
Screen
Różnice między działaniem funkcji pokazuje poniższy screen
Ta funkcja to funcja wzięta z języka VB, więc genealogicznie nie ma nic wspólnego z Excelem, poza tym warto mieć pod ręką jedną i drugą, zawsze to więcej opcji do wyboru. Tak że jak Ty to nazwałeś “niekonsekfencja” czasami wychodzi na plus 😀
Tak, bo zawsze są to dodatkowe funkcje. Problem polega na tym, że na pierwszy rzut oka jest to mylące, bo funkcje nazywają się dokładnie tak samo i user zazwyczaj myśli, że skoro tak, to działają one tak samo.