W Excelu możemy korzystać ze znaków arytmetycznych porównując ze sobą nie tylko liczby.
Porównanie Tekstów
Możemy również zestawiać ze sobą tekst według pozycji danej litery w alfabecie („a”<”b”). Czasami jednak zwykły operator porównania nie wystarczy. W przypadku gdy dwa takie same słowa różnią się wielkością liter, Excel domyślnie uzna je za równe.
Aby rozwiązać ten problem należy zastosować funkcję PORÓWNAJ (z ang. EXACT), która rozróżnia wielkość liter i zezwala na wprowadzenie tablicy.
Funkcja StrComp
Przeznaczenie
W VBA dwa teksty możemy ze sobą porównać za pomocą funkcji StrComp. Działa ona nieco inaczej niż PORÓWNAJ. Jest mniej intuicyjna ponieważ nie zwraca w wyniku wartości typu Boolean tylko Integer. Daje jednak większe możliwości, bo nie skupia się tylko ma sprawdzeniu czy jedna wartość jest równa drugiej, lecz także na tym, czy pierwsza wartość jest mniejsza lub większa od drugiej.
Parametry
Parametrami funkcji są dwie zmienne typu String i jedna stała, którą sobie omówimy poniżej.
0 oznacza porównanie binarne (domyślne) – teksty różniące się tylko wielkością liter są traktowane jako różne. 1 oznacza porównanie tekstowe, które nie uwzględnia wielkości liter przy porównaniu.
Zwracany Wynik
Funkcja zwraca wartość 0 w przypadku gdy oba teksty są sobie równe, -1 w przypadku gdy pierwszy tekst jest mniejszy od drugiego, 1 gdy pierwszy tekst jest większy od drugiego.
W końcu funkcja może zwrócić wartość Null, w sytuacji gdy jeden z dwóch tekstów jest pusty.
Kod Funkcji VBA
Funkcja VBA wyciąga każde pojedyncze słowo z tekstu. Jest to pierwszy argument funkcji. Drugim argumentem jest wzorzec – słowo, którego szukamy.
W przypadku gdy jedno ze słów odpowiada wzorcowi funkcja zwraca w wyniku TRUE. W przeciwnym razie FALSE.
Wyniki można zaobserwować na screenie pod kodem funkcji. W każdym przypadku szukanym słowem jest pies. Różnica jest widoczna tylko w przypadku wpisu Pies ogrodnika.
Function WordExists(Sentence As String, Word As Variant, _
Optional Compare As Integer = 0) As Boolean
Dim vaWordsArray As Variant
Dim iCounter As Integer
Dim bResult As Boolean
Dim sOneWord As String
' Przelicz automatycznie
Application.Volatile
' Utwórz tablicę słów
vaWordsArray = Split(Sentence, " ")
' Porównaj wszystkie słowa ze wzorcem
' Przerwij funkcję gdy któreś słowo mu odpowiada
For iCounter = LBound(vaWordsArray) To UBound(vaWordsArray)
sOneWord = vaWordsArray(iCounter)
If StrComp(Word, sOneWord, Compare) = 0 Then
bResult = True
End If
Next iCounter
' Wartość funkcji jest równa
WordExists = bResult
End Function