W Excelu możemy porównywać ze sobą nie tylko liczby, ale również tekst. Co więcej – możemy to robić za pomocą znaków arytmetycznych! VBA stosuje porównanie binarne i tekstowe. Jakie są między nimi różnice? O tym dowiesz się czytając ten tekst.
Porównanie tekstów
W Excelu możemy zestawiać ze sobą teksty 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. Dzięki temu daje jednak większe możliwości. 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.
Przykład praktyczny
Funkcja VBA wyciąga każde pojedyncze słowo z tekstu. Jest to pierwszy argument funkcji WordExists. 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żemy zobaczyć na screenie pod kodem funkcji. W każdym przypadku szukanym słowem jest pies. Różnica jest widoczna tylko w przypadku wpisu Pies ogrodnika. Jak widać – porównanie binarne i tekstowe – trochę się od siebie różnią.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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 |