1. Funkcje znakowe VBA w Excel
Excelowe VBA oferuje nam szereg użytecznych funkcji znakowych. Nie możemy ich liczby porównywać oczywiście do liczby funkcji w arkuszu Excel i co najważniejsze nie są to te same funkcje. Wykorzystanie funkcji arkuszowych w naszym kodzie VBA opiszemy w osobnym rozdziale. Funkcje znakowe podobnie jak funkcje matematyczne możemy ze sobą łączyć.Możemy także zagnieżdżać jedną funkcję w drugiej. Poniżej tabela zawierająca wszystkie funkcje znakowe w VBA oraz ich dokładny opis.
2. Funkcje znakowe VBA – wykaz funkcji
ASC(string) | Funkcja zamienia podany w argumencie znak na kolejny numer znaku w kodzie ASCII |
CHR(string) | Odwrotność funkcji ASCII. Zamienia kolejny znak numeryczny na znak w kodzie ASCII. |
INSTR(string_1, string_2) | Funkcja wyszukuje w ciągu znaków string_2 frazę zawartą w string_1, zwracając jego pozycję w formie liczby/miejsca, które kolejno zajmuje. Zaczyna od lewej strony. Szuka pierwszego wystąpienia |
INSTRREV(string_1, string_2) | Funkcja wyszukuje ciągu znaków string_2 w ciągu znaków string_1 zwracając jego pozycję w formie liczby/miejsca, które kolejno zajmuje. Zaczyna od prawej strony. Szuka pierwszego wystąpienia |
LCASE(string) | Funkcja zamienia wszystkie litery w ciągu znaków na małe litery. |
LEFT(string, int) | Funkcja zwraca wybraną liczbę znaków z ciągu tekstowego zaczynając od lewej strony. |
LEN(string) | Funkcja zwraca liczbę znaków w podanym ciągu tekstowym. |
LTRIM(string) | Funkcja usuwa spacje z lewej strony ciągu tekstowego. |
MID(string, int_1, int_2) | Funkcja wycina z ciągu znaków string ciąg rozpoczynający się w pozycji int_1 o długości int_2. |
REPLACE(string_1, string_2, string_3) | Funkcja zamienia w ciągu tekstowym string_1 znaki podane w argumencie string_2 na znaki podane w argumencie string_3. Zamienić możemy zarówno pojedynczy znak, jak i całe frazy. |
RIGHT(string, int) | Funkcja zwraca wybraną liczbę znaków z ciągu tekstowego zaczynając od prawej strony. |
RTRIM(string) | Funkcja usuwa spacje z prawej strony ciągu tekstowego. |
SPACE(int) | Funkcja zwraca określoną w argumencie liczbę spacji |
SPLIT(string, delimiter) | Funkcja szuka w ciągu string, znaku kończącego delimiter. Następnie usuwa cały tekst występujący za tym znakiem. |
STR(number) | Zamienia liczbę na typ znakowy String |
STRCOMP(string_1, string_2,[rodzaj porównania]) | Funkcja używana do porównania dwóch wartości tekstowych. Porównuje wartość string_1 z wartością string_2. Jeśli string_1 jest krótszy od string_2, funkcja zwróci wartość -1. Jeśli są równej długości, zwróci 0. Jeśli string_1 jest dłuższy, funkcja zwróci wartość 1. |
STRCONV(string, conversion) | Funkcja używana o konwersji wartości tekstowych. Zmienia wartość tekstową w zależności od wybranego przez nas drugiego argumentu. Funkcja opisana szerzej w rozdziale „Funkcje formatu i konwersji” |
STRREVERSE(string) | Zwraca ciąg znaków w porządku odwrotnym, zaczynając od końca ciągu. |
TRIM(string) | Funkcja usuwa spacje z prawej i lewej strony ciągu tekstowego. |
UCASE(string) | Funkcja zamienia wszystkie litery w ciągu znaków na wielkie litery. |
VAL(string) | Funkcja wyszukuje w ciągu tekstowym text wszystkie znaki liczbowe, następnie je zwraca. Może służyć do usuwania zer wiodących z naszego ciągu tekstowego. |
Niektóre funkcje znakowe VBA jak STRCOMP(), czy SPLIT() umożliwiają wybranie dodatkowych nieopisanych wyżej parametrów. Ich zastosowanie szczegółowo opiszę w części dla zaawansowanych.
3. Przykład wykorzystania funkcji znakowych
Poniżej przykłady wykorzystania wszystkich poznanych w tym rozdziale funkcji znakowych vba. Tak jak w poprzednim rozdziale, tworzymy makro, które wyświetli nam wszystkie funkcje w kolumnie „A” arkusza danych.
Sub FunExample() Range("A1").Value = Asc("a") Range("A2").Value = Chr(122) Range("A3").Value = InStr("dowolny ciąg znaków", "a") Range("A4").Value = InStrRev("dowolny ciąg znaków", "a") Range("A5").Value = LCase("Dowolny Tekst") Range("A6").Value = Left("Dowolny Tekst", 5) Range("A7").Value = Len("dowolny tekst") Range("A8").Value = LTrim(" Jakiś tekst ") Range("A9").Value = Mid("Dowolny ciąg tekstowy", 10, 8) Range("A10").Value = Replace("Dowolny ciąg tekstowy", "tekstowy", "znakowy") Range("A11").Value = Right("Dowolny Tekst", 5) Range("A12").Value = RTrim(" Jakiś tekst ") Range("A13").Value = Space(5) + "Przed tym tekstem jest 5 spacji" Range("A14").Value = Split("Dowolny tekst", " ") Range("A15").Value = Str(123) Range("A16").Value = StrComp("Dowolny tekst1", "Dowolny tekst2", vbTextCompare) Range("A17").Value = StrConv("Dowolny tekst1", vbUpperCase) Range("A18").Value = StrReverse("Jakiś tekst") Range("A19").Value = Trim(" Jakiś tekst ") Range("A20").Value = UCase("Dowolny Tekst") Range("A21").Value = Val("0123") End Sub
Plik Excel z przykładem zamieszczam poniżej:
kurs_excel_vba_funkcje_znakowe
4. Zadania (Rozwiązanie możesz wpisać w komentarzu)
4.1 Działając na zdaniu „Funkcje znakowe VBA”. Wykonaj następujące działania przy użyciu funkcji tekstowych: zlicz długość ciągu znaków ; zamień wszystkie litery na litery wielkie; zamień frazę VBA na frazę VisualBasic ; wytnij z tekstu 5 znaków zaczynając od lewej strony.
4.2 Przy pomocy okienka InputBox wprowadz do VBA zmienną tekstową o wartości 004535. Następnie zamień ją na liczbę i przy użyciu funkcji matematycznej wyciągnij z niej pierwiastek.
13 komentarzy “Funkcje znakowe w Excel VBA”
Podpowie ktoś jak rozwiązać drugie zadanie?
przecież to jest banalne 🙂
Zad. 4.2 ( nie mam pewności czy dobrze )
Sub ZmTekstNaLiczb()
Dim strValue As String
strValue = InputBox(„Podaj zmienną tekstową: „)
Dim intValue As Integer
intValue = strValue
MsgBox (Sqr(intValue))
End Sub
powinno działać 😉
Dlaczego STR(12)+STR(34) daje w efekcie 12 34, czyli skąd ta spacja i jak się jej pozbyć ?
Najprościej możemy się jej pozbyć w ten sposób:
Replace(Str(12) + Str(34), ” „, „”)
Sama spacja bierze się tutaj z formatu wyświetlania. Sam format możemy zmienić za pomocą funkcji format:
MsgBox Format(Str(12) + Str(34), „0000”)
Więcej możesz przeczytać w tym artykule https://tomaszkenig.pl/excel/funkcja-format-vba-korzystac-funkcji/
Sub zadanie1()
Dim tekst As String
tekst = „Funkcje znakowe VBA”
Range(„d1”).Value = Len(tekst)
Range(„d2”).Value = UCase(tekst)
Range(„d3”).Value = Replace(tekst, „VBA”, „Visual Basic”)
Range(„d4”).Value = Left(tekst, 5)
End Sub
Sub zadanie2()
Dim wartosc As String
wartosc = „004535”
Range(„a1”).Value = Sqr(Val(InputBox(„Wprowadź wartość”, , wartosc)))
End Sub
> wytnij z tekstu 5 znaków zaczynając od lewej strony.
z postu powyzej:
> Range(“d4”).Value = Left(tekst, 5)
Szczerze mowiac, to ja to „wytnij” rozumiem jako „usun”, czyli wynikiem ma byc „je znakowe VBA”
Wowczas:
MsgBox („Usuniecie 5-ciu pierwszych znakow: ” & Right(s, Len(s) – 5))
Zadanie 4.1
Option Explicit
Sub FunkcjeZnakowe2()
MsgBox („Zwrot 'Funkcje znakowe VBA’ ma długość ” & Len(„Funkcje znakowe VBA”) & ” znaków”)
MsgBox („Zwrot 'Funkcje znakowe VBA’ zamieniony na litery wielkie wygląda tak: ” & UCase(„Funkcje znakowe VBA”))
MsgBox („A teraz zamienimy zwrot 'VBA’ na coś innego. Tadam!!! –> ” & Replace(„Funkcje znakowe VBA”, „VBA”, „VisualBasic”))
MsgBox („Wycinamy 5 znaków z lewen strony wyrażenia 'Funkcje znakowe VBA’. Oto one: ” & Left(„Funkcje znakowe VBA”, 5))
End Sub
Zadanie 4.2
Option Explicit
Sub ZmienneTekstowe3()
Dim strTekst As String
Dim sinLiczba As Single
strTekst = InputBox(„Wprowadź liczbę 004535”)
sinLiczba = Val(strTekst)
MsgBox Sqr(sinLiczba)
End Sub
Sub eksperyment()
Range(„G5”).Value = Len(„Funkcje znakowe w VBA”)
Range(„G6”).Value = UCase(„Funkcje znakowe w VBA”)
Range(„G7”).Value = Replace(„Funkcje znakowe w VBA”, „VBA”, „Visual Basic for aplikacation”)
Range(„G8”).Value = Mid(„Funkcje znakowe w VBA”, 6, 50)
End Sub
Zadanie 4.2
Sub L15_Zadanie_2()
Dim strValue As String
strValue = InputBox(„Wprowadź wartość 004535:”)
MsgBox (Sqr(Val(strValue)))
End Sub
Tak przygotowana funkcja działa i zwraca prawidłową wartość, nawet gdy pominę funkcję VAL(). Czy VBA zostały wyposażone w jakąś funkcję, która automatycznie rozpoznaje, że w zmiennej zadeklarowanej jako ciąg znaków („String”) są podane same liczby i pozwala przeprowadzić obliczenia bez konieczności zmiany typu zmiennej na np. „Single”?
Ad. 4.1
Sub Znaki()
Dim Tekst As String
Tekst = „Funkcje znakowe VBA”
Cells(1, 1) = Tekst
Cells(2, 1) = „Ilość znaków w tekście:”
Cells(3, 1) = „Zamiana liter na wielkie:”
Cells(4, 1) = „VBA na VisualBasic:”
Cells(5, 1) = „5 znaków od lewej strony:”
Cells(2, 2) = Len(Tekst)
Cells(3, 2) = UCase(Tekst)
Cells(4, 2) = Replace(Tekst, „VBA”, „VisualBasic”)
Cells(5, 2) = Left(Tekst, 5)
End Sub
Ad. 4.2
Sub Zamiana()
Dim Tekst As String
Tekst = InputBox(„Wprowadź liczbę 004535”)
Cells(1, 1) = Tekst
Cells(2, 1) = „Zamiana na liczbę”
Cells(3, 1) = „Pierwiastek z liczby”
Cells(2, 2) = Val(Cells(1, 1))
Cells(3, 2) = Sqr(Cells(2, 2))
End Sub