Excel oprócz operacji liczbowych potrafi też generować dokumenty tekstowe. Dzięki prostej podmianie podstawowych danych mogą one być adresowane do wielu osób. Przykładem takiego dokumentu – rozsyłanego do wielu osób, ale ze spersonalizowanymi danymi - jest zaproszenie na spotkanie czy konferencję. W tym celu użyjemy funkcji tekstowych w VBA. Zapraszamy do przygotowania zaproszenia!
Z lekcji dowiesz się:
Jak zastosować funkcje tekstowe w VBA?
Jak przygotować zaproszenie na konferencję w Excelu?
Co to są sztuczne zmienne?
Z lekcji dowiesz się:
Jak zastosować funkcje tekstowe w VBA?
Jak przygotować zaproszenie na konferencję w Excelu?
Co to są sztuczne zmienne?
Naszym zadaniem jest wygenerowanie zaproszenia w oparciu o 3 zmienne, które są już podane przez użytkownika:
imię i nazwisko - celem będzie za pomocą funkcji tekstowych pobranie jedynie nazwiska z całego podanego tekstu,
wiek - w oparciu o pełnoletność osoby, będziemy mogli dynamicznie zmienia
treść zaproszenia z Pana/Pani, kiedy osoba ma więcej niż 18 lat, na Koleżanka/Kolega, kiedy osoba ma mniej niż 18 lat,
płeć - poprzez płeć będziemy determinować odpowiednią formułę osobową zaproszenia Pani/Koleżanka – dla kobiety i Pan/Kolega dla mężczyzny.
Dla przykładu – napisana funkcja dla użytkownika Anna Majda, która ma 25 lat i jest kobietą, powinna wygenerować następujące zaproszenie: „Szanowna Pani Majda jest zaproszona na konferencję…”
Kod programu:
Sub Zadanie_1()
Dim Godnosc As String
Dim Nazwisko As String
Dim dalszaCzesc As String
Tworzymy 3 sztuczne zmienne, które będą przechowywały wartości tekstowe w programie. Pamiętamy, że zmienne tekstowe deklarujemy jako wartość String.
dalszaCzesc = "Co dalej jest w zaproszeniu" -> dla przykładu tworzymy zmienną do której wpisujemy wartość tekstową, należy pamiętać, że jeżeli chcemy do zmiennej wpisać tekst, zawsze należy umieszczać go w cudzysłowie
Godnosc = Range("A2").Value -> w komórkę A2 wpisujemy imię i nazwisko (z tej zmiennej chcemy uzyskać tylko nazwisko)
W tym celu użyjemy, funkcji tekstowych. Poniżej przykłady funkcji tekstowej wraz z wyjaśnieniem.
LEFT(TEKST,DŁUGOŚĆ) np. LEFT(„VBA”,2)= VB
RIGHT(TEKST,DŁUGOŚĆ) np. RIGHT(„VBA”,2)=BA
LEN(TEKST) np. LEN(VBA)=3
INSTR(GDZIE_SZUKAM,CO_SZUKAM) np. INSTR(„VBA”, ”BA”)=2
REPLACE(GDZIE,CO,NA_CO) np. REPLACE(„VBA”,”BA”,”CE”)=VCE
Tak jak ustaliliśmy, celem jest pobranie z imienia i nazwiska wpisanego w komórkę jedynie nazwiska. Zapisujemy fragment kodu, który umożliwi pozyskanie zadanej wartości.
Nazwisko = Right(Godnosc, Len(Godnosc) - InStr(Godnosc, " "))
Podzielmy funkcje Right na dwie części aby lepiej zrozumieć jej działanie:
Right(Godnosc, Len(Godnosc)) – gdyby funkcja miała taką postać to zwróciłaby cały wyraz podany w komórce, czyli Anna Majda. W zaproszeniu zależy nam tylko na drugim członie, dlatego musimy znaleźć znak charakterystyczny, który oddziela je od siebie. Tym znakiem jest spacja, która w języku VBA traktowana jest jak normalny znak i zapisywany jest jako ” ” - czyli „pusty znak”. Następnie wykorzystamy funkcje Instr, która zwraca numer na którym znajduje się pusty znak. Odejmując liczbę całego wyrazu od liczby znaków do spacji uzyskamy ilość znaków na którym znajduje się drugi człon wyrazu. Jako, że składnia to imię nazwisko, to wyciągając tą liczbę od prawej strony uda się wyciągnąć nazwisko.
Następnie przechodzimy do weryfikacji płci oraz wieku osoby. W tym celu wykorzystamy funkcję Select Case (płeć), wewnątrz której wprowadzimy instrukcję warunkową (wiek).
Select Case Left(Cells(2, 3).Value, 1) -> przy użyciu funkcji tekstowej I konstrukcji Select Case musimy wyodrębnić pierwszą literę wyrazu licząc od lewej strony, a na jej podstawie zdeterminować składnie wewnątrz Case. Niezależnie czy wpiszemy płeć jako K, kobieta program działa poprawnie
Case "K"
If Range("B2") > 18 Then -> jeżeli wiek użytkownika jest większy od 18 to wykonaj następujące polecenie:
Range("D2").Value = "Szanowna Pani " & Nazwisko & " jest zaproszona na konferencje" generujemy odpowiednie zaproszenie na konferencję, ważne aby pamiętać że tekst należy umieszczać w cudzysłowie, natomiast zmienna mimo tego że wewnątrz zawiera tekst, to oczywiście nie wymaga zapisu w cudzysłowie. Odpowiednie części tekstu łączymy za pomocą „&”.
Else '
Range("D2").Value = "Szanowna Koleżanka " & Nazwisko & " jest zaproszona na konferencję " & dalszaCzesc
End If
Case "M" -> analogiczna konstrukcja jak powyżej tylko w przypadku kiedy podana osoba jest płci męskiej:
If Range("B2") > 18 Then
Range("D2").Value = "Szanowny Pan " & Nazwisko & " jest zaproszona na konferencje"
Else '
Range("D2").Value = "Szanowny Kolega " & Nazwisko & " jest zaproszona na konferencje"
End If
Case Else -> instrukcja która wyświetla podaną wartość, jeśli pierwsza litera w sprawdzanej komórce nie odpowiada wcześniejszym wartością Case, czyli w tym przypadku nie jest to ani K ani M.
MsgBox ("Niepoprawna plec")
End Select
End Sub
Pełna postać kodu:
Sub Zadanie_1()
Dim Godnosc As String
Dim Nazwisko As String
Dim dalszaCzesc As String
dalszaCzesc = "Co dalej jest w zapro"
Godnosc = Range("A2").Value
Nazwisko = Right(Godnosc, Len(Godnosc) - InStr(Godnosc, " "))
Select Case Left(Cells(2, 3).Value, 1)
Case "K"
If Range("B2") > 18 Then
Range("D2").Value = "Szanowna Pani " & Nazwisko & " jest zaproszona na konferencje"
Else '
Range("D2").Value = "Szanowna Koleżanka " & Nazwisko & " jest zaproszona na konferencje " & dalszaCzesc
End If
Case "M"
If Range("B2") > 18 Then
Range("D2").Value = "Szanowny Pan " & Nazwisko & " jest zaproszona na konferencje"
Else '
Range("D2").Value = "Szanowny Kolega " & Nazwisko & " jest zaproszona na konferencje"
End If
Case Else
MsgBox ("Niepoprawna plec")
End Select
End Sub
Polecamy także:
© Sprytny Excel