Przykłady wykorzystania funkcji VBA. Wbudowane funkcje funkcji Oracle Vba Excel do pracy z ciągami znaków

  • ASC () - funkcja ta umożliwia zwrócenie kodu numerycznego przekazanego znaku. Na przykład ASC("D") zwróci 68. Ta funkcja jest przydatna do określenia następnej lub poprzedniej litery. Zwykle używa się go w połączeniu z funkcją Chr(), która wykonuje operację odwrotną - zwraca znak zgodnie z przesłanym kodem numerycznym.Warianty tej funkcji to AscB() I AscW():
    • AscB () - zwraca tylko pierwszy bajt kodu numerycznego znaku.
    • AscW () - zwraca kod znaku w kodowaniu Unicode
  • Chr () - zwraca znak według jego kodu numerycznego. Może być używany w połączeniu z funkcją Asc(), ale najczęściej jest używany, gdy trzeba wydrukować znak usługi (na przykład cudzysłów - "), ponieważ W kodzie VBA nie można po prostu wprowadzać cudzysłowów (musisz wstawić podwójnie). To jest funkcja, z której zwykle korzystam.

    Dim SWord As String SWord = Chr(34) & „Słowo w cudzysłowie” & Chr(34)

    Istnieją opcje tej funkcji - ChrB() I ChrW(). Działaj podobnie z tymi samymi opcjami dla funkcji Rosnąco().

  • InStr () I InStrRev () - jedna z najpopularniejszych funkcji. Umożliwia wykrycie znaku lub sekwencji znaków w treści zmiennej łańcuchowej i zwrócenie ich położenia. Jeśli sekwencja nie zostanie znaleziona, zwracane jest 0.

    Dim sStr As String sStr = "w" If InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 then MsgBox "Wyszukiwane słowo jest obecne!" Else MsgBox "Brak szukanego słowa!" Zakończ jeśli

    Różnica pomiędzy funkcjami polega na tym, że InStr() wyszukuje podane słowo od początku linii, a InStrRev() od końca linii

  • Lewy () , Prawidłowy () , Środek () - możliwość pobrania określonej przez Ciebie liczby znaków z istniejącej zmiennej łańcuchowej odpowiednio po lewej, prawej lub środkowej stronie.
    Dim sStr As String sStr = "Witaj, świecie!" MsgBox Mid(sStr, 1, 5)

    Dim sStr As String sStr = "Witaj, świecie!" MsgBox Mid(sStr, 1, 5)

  • Len () - możliwość uzyskania liczby znaków w linii. Często używane z pętlami, operacjami zamiany itp.
  • LPrzypadek () I UPrzypadek () - przekonwertuj ciąg odpowiednio na małe i duże litery. Często używane do przygotowania wartości do porównania, gdy wielkość liter nie jest istotna podczas porównywania (nazwiska, nazwy firm, miast itp.).
  • LUstaw () I Ust () - możliwość wypełnienia jednej zmiennej symbolami drugiej bez zmiany jej długości (odpowiednio lewy i prawy). Dodatkowe znaki są obcinane, a brakujące znaki zastępowane są spacjami.
  • LPrzytnij () , RPrzytnij () , Przycinać () - możliwość usuwania spacji odpowiednio po lewej, prawej stronie lub po lewej i prawej stronie.
  • Zastępować () - możliwość zamiany jednego ciągu znaków w ciągu znaków na inny.
    Dim sStr As String sStr = "Witaj, świecie!" MsgBox Zamień(sStr, "Witam", "Zatoka" )

    Dim sStr As String sStr = "Witaj, świecie!" MsgBox Zamień(sStr, „Witam”, „Zatoka”)

  • Przestrzeń () - pobierz ciąg znaków z określonej liczby spacji;
    Inną podobną funkcją jest Specj () , który służy do formatowania danych wyjściowych konsoli. Mnoży spacje w oparciu o szerokość wiersza poleceń.
  • StrComp () - możliwość porównania dwóch ciągów znaków.
  • StrKonw () - możliwość konwersji ciągu znaków (do Unicode i odwrotnie, do wielkich i małych liter, pierwsza litera słowa jest wielka itp.):
    Dim sStr As String sStr = "Witaj, świecie!" MsgBox StrConv("Witaj, świecie!", vbUpperCase)

    Dim sStr As String sStr = "Witaj, świecie!" MsgBox StrConv("Witaj, świecie!", vbUpperCase)

    Jako drugi parametr parametru można zastosować stałe:

    • vbWielkie litery: Konwertuje wszystkie znaki tekstowe na WIELKIE
    • vbDolna litera: Konwertuje wszystkie znaki tekstowe na małe litery
    • vbProperPrzypadek: Konwertuje pierwszy znak każdego słowa na wielkie litery
    • *vbSzeroki: Konwertuje znaki ciągu z jednobajtowego na dwubajtowe
    • *vbWąskie: Konwertuje znaki ciągu z dwubajtowego na jednobajtowy
    • **vbKatakana: Konwertuje znaki Hiragana na znaki Katakana
    • **vbHiragana: Konwertuje znaki Katakana na znaki Hiragana
    • ***vbUnikod: Konwertuje ciąg na Unicode przy użyciu domyślnej strony kodowej systemu
    • ***vbZ Unicode: Konwertuje ciąg Unicode na domyślną stronę kodową systemu
    • * dotyczy lokalizacji Dalekiego Wschodu
      ** Dotyczy tylko Japonii
      *** nie jest obsługiwane w systemach operacyjnych Macintosh

  • StrRewers () - „odwrócić” ciąg znaków, umieszczając jego znaki w odwrotnej kolejności. Funkcja działa tylko w programie Excel 2000 i nowszych wersjach. Przykład wykorzystania tej funkcji, a także innych metod zamiany słowa znajdziesz w tym artykule: Jak odwrócić słowo?
  • Patka () to kolejna funkcja używana do formatowania danych wyjściowych konsoli. Reprodukuje znaki tabulacji w określonej liczbie. Jeśli nie określono ilości, po prostu wstawia znak tabulacji. Możesz także użyć tej stałej, aby wstawić znak tabulacji do wartości ciągu vbTab.
  • Strunowy () - pozwala uzyskać ciąg o określonej liczbie znaków (które ponownie są określone przez Ciebie). Zwykle używane do formatowania danych wyjściowych w połączeniu z funkcją Len().

(http://www.cyberforum.ru/vba/thread638743.html)

opcja 1

strW= (="KOROTEEV DMITRY VLADIMIROVICH") strB=Zamień(Zamień(strW, Chr(61), ""), Chr(34), "")

Opcja

Możesz także użyć tablicy bajtów:

Sub n() Dim Mass() jako bajt, n jako długość, Zam jako ciąg, TXT jako ciąg TXT = "="" DMITRY VLADIMIROVICH KOROTEEV" Masa = StrConv(TXT, vbFromUnicode) Dla n = 0 Do UBound(masa) If Masa (n)<>34 I masa (n)<>61 Następnie Zam = Zam + Chr$(Mass(n)) Następny MsgBox Zam End Sub

Opcja

Lub filtrowanie za pomocą środka:

Sub nn() Dim n As Long, TXT jako ciąg, L jako ciąg, Zam jako ciąg TXT = "="" DMITRY VLADIMIROVICH KOROTEEV" For n = 1 To Len(TXT) L = Mid$(TXT, n, 1) Jeśli L<>"""" I ja<>"=" Następnie Zam = Zam + L Next MsgBox Zam End Sub

Linię 6 można zastąpić husky:
Kod Visual Basic
1
Jeśli L jak „[!””=]”, to Zam = Zam + L

Opcja

Również poprzez wyszukiwanie pozycji i rekurencję:

Sub test() Dim n As Long, txt As String txt = "=""DMITRY VLADIMIROVICH KOROTEEV" txt = Change(txt, "=") txt = Change(txt, """") MsgBox txt End Subfunkcja Change( txt As String, What As String, Opcjonalnie Poz = 1) Dim n As Long If Pos<>0 Następnie n = InStr(Pos, txt, What) Change = Mid$(txt, Pos, IIf(n - Pos< 0, Len(txt), n - Pos)) + Change(txt, What, IIf(n = 0, 0, n + 1)) End If End Function

Można też używać wyrażeń regularnych, ale ich nie znam.

Opcja

Poprzez wyszukiwanie od prawej do lewej i rekursję:

Kod Visual Basic
1 2 3 4 5 6 7 8 Zmiana funkcji (txt jako ciąg, co jako ciąg, opcjonalnie Pos tak długo) Dim n As Long Jeśli Pos = 0 To Pos = Len(txt) Jeśli Pos<>-1 Wtedy n = InStrRev(txt, What, Pos) Change = Change(txt, What, IIf(n = 1, -1, n - 1)) + Mid$(txt, n + 1, Pos - n) End Jeśli funkcja zakończenia

Opcja

I jest też Podział I Dołączyć

Strb = Join(Split(Join(Split(strW, "="), ""), """"), "")

Poza tematem: Ale to jest dla sadystów

Wielka i mała litera

Z ActiveDocument.Range "uppercase.Text = Ucase(.Text) "lowercase.Text = Lcase(.Text) Koniec z

lub StrConv() - konwertuje ciąg znaków (na Unicode i odwrotnie, na wielkie i małe litery, pisz wielką pierwszą literę wyrazu itp.) - patrz poniżej

Operacje na ciągach

Dla danych typu String wykonywana jest tylko jedna operacja – konkatenacja (suma). Na przykład wynikiem operacji łączenia trzech wartości łańcuchowych „Piotr” & » » & „Iwanowicz” będzie ciąg „Piotr Iwanowicz”. Do operacji łączenia można także użyć innego operatora, np. „dziesięć” + „tysiąc”. Różnica pomiędzy tymi wyrażeniami polega na tym, że w pierwszym przypadku operandy mogą być wartościami dowolnego typu (zostaną po prostu zamienione na stringi), a w drugim oba operandy muszą być typu String. Istnieje duża liczba funkcji do pracy z ciągami znaków (tabela. Funkcje do pracy z ciągami).

Tabela „Funkcje do pracy z ciągami znaków”

Funkcjonować Opis Przykład
Len(str) Określa długość ciągu Z a=len("Znaki") wynika a=9
Lewy (<строка>, <длина>) Wyciągi z argumentacji<строка>określoną liczbę znaków po lewej stronie Lewy("1234string", 4) ="1234″
Prawidłowy(<строка>, <длина>) Wyciągi z argumentacji<строка>określoną liczbę znaków po prawej stronie Prawo(" 1234string", 6) ="string"
Środek(<строка>, <старт> [, <длина>]) Wyciągi z argumentacji<строка>podciąg o określonej liczbie znaków, zaczynając od pozycji<старт> Średni("12345678″, 4,3) = "456"
Środek(<строка>, <старт>) Z pozycji wyodrębniany jest podciąg<старт>do końca linii Środek("12345678″, 4)="45678"
LPrzytnij(<строка>) Usuwa spacje z początku linii LTrim("drukuj") ="drukuj"
RPrzycinanie (<строка>) Usuwa spacje na końcu ciągu RTrim("drukuj") = "drukuj"
Przycinać (<строка>) Usuwa spacje na początku i na końcu ciągu Przytnij("drukuj") ="drukuj"
InStr([<старт>, ] < строка1>, <строка2> [, <сравнение>]) Wyszukuje podciąg w ciągu. Zwraca pozycję pierwszego wystąpienia ciągu<строка2>do linii<строка1>, <старт>— pozycja, od której rozpoczyna się wyszukiwanie. Jeśli ten argument zostanie pominięty, wyszukiwanie rozpoczyna się od początku ciągu Instr("C:Temp test.mdb", "Test")=9 Jeśli szukany ciąg nie znajduje się w podanym ciągu, funkcja zwraca 0
InStrRev([<старт>, ] <строка1>, <строка2> [, <сравнение>]) Wyszukuje podciąg w ciągu, ale rozpoczyna wyszukiwanie na końcu ciągu i zwraca pozycję ostatniego wystąpienia podciągu. Argument opcjonalny<сравнение>definiuje typ porównania dwóch ciągów znaków
Zastępować (<строка>, <строкаПоиск>, <строкаЗамена>) Umożliwia zamianę jednego podciągu w ciągu na inny. Ta funkcja wyszukuje wszystkie wystąpienia argumentu<строкаПоиск>w kłótni<строка>i zastępuje je<строкаЗамена>

Do porównywania wartości ciągów można używać zwykłych numerycznych operatorów porównania, ponieważ przy porównywaniu znaków porównywane są ich kody binarne. Operator Like jest również używany do porównywania wartości ciągów, co pozwala wykryć niedokładne dopasowanie, na przykład wyrażenie „Input” Like „Input*” zostanie ocenione na True, ponieważ porównywany ciąg zaczyna się od słowa „Input”. Znak gwiazdki (*) w ciągu zastępuje dowolną liczbę znaków. Inne znaki przetwarzane przez operator Like w porównywanym ciągu:

  • ? – dowolny znak (jeden);
  • # – jedna cyfra (0–9);
  • [<список>] – znak pasujący do jednego ze znaków na liście;
  • [!<список>] – znak, który nie pasuje do żadnego ze znaków na liście.
  • ASC() - funkcja ta umożliwia zwrócenie kodu numerycznego przekazanego znaku. Na przykład ASC("D") zwróci 68. Ta funkcja jest przydatna do określenia następnej lub poprzedniej litery. Zwykle używa się go w połączeniu z funkcją Chr(), która wykonuje operację odwrotną - zwraca znak zgodnie z przesłanym kodem numerycznym.Warianty tej funkcji to AscB() I AscW():
    • AscB() - zwraca tylko pierwszy bajt kodu numerycznego znaku.
    • AscW() - zwraca kod znaku w kodowaniu Unicode
  • Chr() - zwraca znak według jego kodu numerycznego. Może być używany w połączeniu z funkcją Asc(), ale najczęściej jest używany, gdy trzeba wydrukować znak usługi (na przykład cudzysłów - "), ponieważ W kodzie VBA nie można po prostu wprowadzać cudzysłowów (musisz wstawić podwójnie). To jest funkcja, z której zwykle korzystam.

    Dim SWord As String SWord = Chr(34) & „Słowo w cudzysłowie” & Chr(34)

    Istnieją opcje tej funkcji - ChrB() I ChrW(). Działaj podobnie z tymi samymi opcjami dla funkcji Rosnąco().

  • InStr() I InStrRev() - jedna z najpopularniejszych funkcji. Umożliwia wykrycie znaku lub sekwencji znaków w treści zmiennej łańcuchowej i zwrócenie ich położenia. Jeśli sekwencja nie zostanie znaleziona, zwracane jest 0.

    Dim sStr As String sStr = "w" If InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 then MsgBox "Wyszukiwane słowo jest obecne!" Else MsgBox "Brak szukanego słowa!" Zakończ jeśli

    Różnica pomiędzy funkcjami polega na tym, że InStr() wyszukuje podane słowo od początku linii, a InStrRev() od końca linii

  • Lewy() , Prawidłowy() , Środek() - możliwość pobrania określonej przez Ciebie liczby znaków z istniejącej zmiennej łańcuchowej odpowiednio po lewej, prawej lub środkowej stronie.

    Dim sStr As String sStr = "Witaj, świecie!" MsgBox Mid(sStr, 1, 5)

  • Len() - możliwość uzyskania liczby znaków w linii. Często używane z pętlami, operacjami zamiany itp.
  • LPrzypadek() I UPrzypadek() - przekonwertuj ciąg odpowiednio na małe i duże litery. Często używane do przygotowania wartości do porównania, gdy wielkość liter nie jest istotna podczas porównywania (nazwiska, nazwy firm, miast itp.).
  • LUstaw() I Ust() - możliwość wypełnienia jednej zmiennej symbolami drugiej bez zmiany jej długości (odpowiednio lewy i prawy). Dodatkowe znaki są obcinane, a brakujące znaki zastępowane są spacjami.
  • LPrzytnij() , RPrzytnij() , Przycinać() - możliwość usuwania spacji odpowiednio po lewej, prawej stronie lub po lewej i prawej stronie.
  • Zastępować() - możliwość zamiany jednego ciągu znaków w ciągu znaków na inny.

    Dim sStr As String sStr = "Witaj, świecie!" MsgBox Zamień(sStr, „Witam”, „Zatoka”)

  • Przestrzeń() - pobierz ciąg znaków z określonej liczby spacji;
    Inną podobną funkcją jest Specj() , który służy do formatowania danych wyjściowych konsoli. Mnoży spacje w oparciu o szerokość wiersza poleceń.
  • StrComp() - możliwość porównania dwóch ciągów znaków.
  • StrKonw() - możliwość konwersji ciągu znaków (do Unicode i odwrotnie, do wielkich i małych liter, pierwsza litera słowa jest wielka itp.):

    Dim sStr As String sStr = "Witaj, świecie!" MsgBox StrConv("Witaj, świecie!", vbUpperCase)

    Jako drugi parametr parametru można zastosować stałe:

      • vbWielkie litery: Konwertuje wszystkie znaki tekstowe na WIELKIE
      • vbDolna litera: Konwertuje wszystkie znaki tekstowe na małe litery
      • vbProperPrzypadek: Konwertuje pierwszy znak każdego słowa na wielkie litery
      • *vbSzeroki: Konwertuje znaki ciągu z jednobajtowego na dwubajtowe
      • *vbWąskie: Konwertuje znaki ciągu z dwubajtowego na jednobajtowy
      • **vbKatakana: Konwertuje znaki Hiragana na znaki Katakana
      • **vbHiragana: Konwertuje znaki Katakana na znaki Hiragana
      • ***vbUnikod: Konwertuje ciąg na Unicode przy użyciu domyślnej strony kodowej systemu
      • ***vbZ Unicode: Konwertuje ciąg Unicode na domyślną stronę kodową systemu

    * dotyczy lokalizacji na Dalekim Wschodzie
    ** Dotyczy tylko Japonii
    *** nie jest obsługiwane w systemach operacyjnych Macintosh

  • StrRewers() - „odwrócić” ciąg znaków, umieszczając jego znaki w odwrotnej kolejności. Funkcja działa tylko w programie Excel 2000 i nowszych wersjach. Przykład wykorzystania tej funkcji, a także innych metod zamiany słowa znajdziesz w tym artykule: Jak odwrócić słowo?
  • Patka() to kolejna funkcja używana do formatowania danych wyjściowych konsoli. Reprodukuje znaki tabulacji w określonej liczbie. Jeśli nie określono ilości, po prostu wstawia znak tabulacji. Możesz także użyć tej stałej, aby wstawić znak tabulacji do wartości ciągu vbTab.
  • Strunowy() - pozwala uzyskać ciąg o określonej liczbie znaków (które ponownie są określone przez Ciebie). Zwykle używane do formatowania danych wyjściowych w połączeniu z funkcją Len().

Poniższe trzy funkcje umożliwiają pracę z tablicą ciągów znaków

Podział (<строка> [, <разделитель>]) – konwertuje ciąg znaków na tablicę podciągów. Domyślnie jako ogranicznik używana jest spacja. Ta funkcja jest wygodna w użyciu przy dzieleniu zdania na słowa. W tej funkcji można jednak określić dowolny inny ogranicznik. Na przykład Split(3, „To jest zdanie testowe”) zwraca tablicę trzech wartości łańcuchowych: „To”, „test”, „zdanie”. Dołączyć (<массивСтрок> [, <разделитель>]) – konwertuje tablicę ciągów znaków na pojedynczy ciąg znaków z określonym ogranicznikiem. Filtr(<массивСтрок>, <строкаПоиск>[, <включение>] [, <сравнение>]) – skanuje tablicę wartości ciągów i wyszukuje wszystkie podciągi pasujące do podanego ciągu. Funkcja ta ma cztery argumenty:<строкаПоиск>- szukana fraza;<включение>– parametr (wartość logiczna) określający, czy zwracane wiersze będą zawierały poszukiwany podciąg, czy też zwrócone zostaną tylko te wiersze tablicy, które nie zawierają szukanego ciągu jako podciągu;<сравнение>– parametr określający sposób porównywania ciągów. Trzy dodatkowe funkcje umożliwiają konwersję ciągów: LCase(<строка>) – konwertuje wszystkie znaki w ciągu na małe litery, np. funkcja LCase("MAIL") zwraca ciąg "mail"; UPrzypadek(<строка>) – konwertuje wszystkie znaki w ciągu na wielkie litery; StrConv(<строка>, <преобразование>) – wykonuje kilka typów transformacji stringów w zależności od drugiego parametru. Parametr ten jest opisany wbudowanymi stałymi, np. funkcja StrConv("Rosja", VbProperCase) zwraca wartość "Rosja".

Dwie ostatnie funkcje generują ciągi znaków

Przestrzeń(<число>) – tworzy ciąg składający się z określonej liczby spacji; Strunowy(<число>, <символ>) – tworzy ciąg składający się z liczby znaków określonej w pierwszym argumencie. Sam symbol jest określony w drugim argumencie.

Przykład

Utwórz program współpracujący ze zmiennymi łańcuchowymi. W tym celu utwórz formularz, którego etykiety zawierają następujące komunikaty: 1 etykieta: raportowana jest długość ciągu znaków wpisanego w pierwszym polu tekstowym (1 linia); 2 etykieta: konwertuje wszystkie znaki trzeciego pola tekstowego (3. linia) na wielkie litery; Trzecia etykieta: wyświetla razem zawartość pierwszego i drugiego pola tekstowego (linie 1 i 2).

Technologia wykonania

  • Otwórz Word, zapisz dokument i przejdź do edytora VBA.
  • Utwórz kształt podobny do obrazka poniżej.
  • Napisz procedurę obsługi zdarzenia dla przycisku OK.
  • Skompiluj program.
  • Uruchom formularz.

Private Sub CommandButton1_Click() Dim a As String Dim b Jako String Dim c Jako String Dim k Jako String Dim d Jako String Dim n As Integer a=TextBox1.Text n=Len(a) Label7.Caption=„długość pierwszego linia to” & n & „znaki” c=TextBox3.Text k=Ucase(с) Label8.Caption=k b=TextBox2.Text d=a + " " + b Label9.Caption=d End Sub

Zadanie

Konieczne jest, aby w Excelu w komórce A1 wyszukano słowa zapisane oddzielone przecinkami w kolumnie A2, a wynik i znalezione słowa wraz z liczbą ich powtórzeń (jeśli to możliwe) w wyszukiwanym tekście zapisano w kolejna, trzecia komórka. (byłoby jeszcze lepiej, gdyby zostały one w jakiś sposób wyróżnione (lub podkreślone) w pierwszej komórce... tak, aby były od razu widoczne. Oto jak umieszcza się słowa w tablicy:

Kod Visual Basic
1 2 3 4 5 6 Dim m() As String Jeśli InStr(1, Cells(1, 2).Value, ","") > 0 Następnie m = Split(Replace(Cells(1, 2).Value, " ", ""), „ ”, „”) Inaczej ReDim m(0): m(0) = Trim(Komórki(1, 2).Wartość) End If

A następnie w pętli szukasz wszystkich słów (ponownie w pętli, zagnieżdżone) Dodano po 23 minutach

Kod Visual Basic
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 Opcja Porównaj tekst Opcja Jawna Sub QWERT() Dim R, N, K Dim m() As String If InStr(1, Cells(1, 2).Value, ",") > 0 Następnie m = Split(Replace(Cells( 1, 2).Value, " ", ""), ",") Inaczej ReDim m(0): m(0) = Trim(Cells(1, 2).Value) End If For R = 0 To UBound( m) N = 1 Jeśli InStr(1, Komórki(1, 1).Wartość, m(R)) > 0 To K = InStr(N, Komórki(1, 1).Wartość, m(R)) Do KOLOR K , Len(m(R)) N = K + Len(m(R)) K = InStr(N, Cells(1, 1).Value, m(R)) Pętla Gdy K > 0 End If Next R End Sub KOLOR PODrzędny(ST, LN) Z Komórkami(1, 1).Znaki(Początek:=ST, Długość:=LN).Czcionka .Kolor = RGB(0, 0, 255) .Pogrubienie = Prawdziwy Koniec Z Końcem Sub

Dodano po 15 minutach W ten sposób przeszuka początek słowa i zaznaczy całe słowo

Kod Visual Basic
1 2 3 4 5 6 7 8 9 10 11 Podkolor(ST, LN) LN = LN - 1 Do LN = LN + 1 pętla Podczas VBA.Mid(Komórki(1, 1).Wartość, ST + LN, 1)<>" " Z komórkami(1, 1).Znaki(Początek:=ST, Długość:=LN).Czcionka .Color = RGB(0, 0, 255) .Pogrubienie = True End With End Sub

Możesz wyszukiwać nie od początku słowa, ale według jego części. — dodaj kolejny cykl Do-Loop. Przesuń tylko początek (ST) w lewo do spacji (http://www.cyberforum.ru/vba/thread567588.html)

Instrukcje: dopasowywanie ciągu do wzorca (Visual Basic)

Sprawdzenie zgodności strings do szablonu Typ danych String (Visual Basic) - Operator Like (Visual Basic) . lewy operand operatora Like jest wyrażeniem łańcuchowym, a prawy operand jest ciągiem szablonowym Like zwraca wartość logiczną

Kontrola charakteru

? - dowolny symbol

  • myString składa się ze znaku W, po którym następują dowolne 2 znaki

    Dim sMatch As Boolean = myString Podobnie jak „W?”

Dowolny znak z listy i zakresu

Dowolny znak, a następnie jeden ze znaków A, C lub E

    Dim sMatch As Boolean = myString Podobnie jak „?” wielkość liter ma znaczenie

  • myString = liczba znaków, a następnie jeden znak z zakresu: i, j, k, l, m lub n:

    Dim sMatch As Boolean = myString Jak „num” wielkość liter ma znaczenie

Like działa zarówno z ciągiem tablicowym o zerowej długości („”). pozwala sprawdzić, czy ciąg znaków jest pusty

Znak z listy lub brak znaku

  1. Operator Like jest używany dwukrotnie, a wyniki są łączone przy użyciu operatora Or (Visual Basic) lub operatora OrElse (Visual Basic).
  2. W pierwszym szablonie wyciągu wstaw listę znaków w nawiasach kwadratowych ().
  3. W drugim szablonie wyciągu nie umieszczaj niczego w miejscu czeku.Przykład: sprawdzanie siedmiocyfrowego numeru telefonuphoneNum, który musi zawierać dokładnie trzy cyfry, po których następuje spacja, łącznik, kropka lub brak znaku, a następnie cztery cyfry. (pierwsze trzy cyfry nie mogą być oddzielone od ostatnich czterech - „brak znaku”) Null , wystąpi błąd. Jeśli zostanie podany argument typ_porównania , argument pozycja startowa jest obowiązkowe. linia 1 Wymagany. Wyrażenie ciągu, który jest poszukiwany. linia 2 Wymagany. Wyrażenie ciągu, którego szukasz. typ_porównania Opcjonalny. Określa typ porównania ciągów. Jeśli wartość argumentu typ_porównania ma wartość Null, pojawia się błąd. Jeśli argumentem typ_porównania pominięty, typ porównania jest określany na podstawie parametru Oznaczający Poślubićgroza. Określ prawidłowy parametr LCID (LocaleID), aby użyć reguł porównania określonych w ustawieniach języka.

    Opcje

    Argument typ_porównania wykorzystuje następujące parametry:

    Zwróć wartości

    Notatki

    Funkcjonować InStrB używany z danymi bajtowymi zawartymi w ciągu znaków. Funkcjonować InStrB zwraca pozycję bajtu, a nie pozycję znaku, pierwszego wystąpienia jednego ciągu w innym.

    Przykłady

    Używanie funkcji InStr w wyrażeniu Za każdym razem, gdy używasz wyrażeń, możesz użyć funkcji InStr. Na przykład, jeśli chcesz określić położenie pierwszego punktu ( . ) w polu zawierającym adres IP (o nazwie „Adres IP”) możesz skorzystać z tej funkcji InStr znaleźć to:

    InStr(1,,"")

    Funkcjonować InStr sprawdza każdą wartość w polu „Adres IP” i zwraca pozycję pierwszego punktu. Dlatego też, jeśli wartość pierwszego oktetu adresu IP wynosi 10. , funkcja zwraca wartość 3.

    Możesz użyć innych funkcji, które korzystają z wyniku funkcji InStr, aby wyodrębnić wartość oktetu adresu IP poprzedzającego pierwszą kropkę, na przykład:

    Lewy(,(InStr(1,,.””)-1))

    W tym przykładzie funkcja InStr(1,,"") zwraca położenie pierwszego punktu. W wyniku odjęcia 1 wyznaczana jest liczba znaków poprzedzających pierwszy punkt, w tym przypadku - 2. Wtedy funkcja Lewy wyodrębnia te znaki z lewej strony pola „Adres IP”, zwracając wartość 10.

    Korzystanie z funkcji InStr w kodzie Visual Basic for Applications (VBA).

    NOTATKA. Poniższe przykłady ilustrują użycie modułu Visual Basic for Applications (VBA). Aby uzyskać więcej informacji na temat pracy z VBA, wybierz Referencje dewelopera na liście rozwijanej obok przycisku Szukaj, a następnie wprowadź jedno lub więcej słów kluczowych w polu wyszukiwania.

    W tym przykładzie funkcja InStr używany do uzyskania pozycji pierwszego wystąpienia jednego ciągu w innym.

    Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" " Ciąg do wyszukiwania. SearchChar = "P" " Wyszukaj "P". " Porównanie tekstowe rozpoczynające się od pozycji 4. Zwraca 6. MyPos = Instr( 4, Szukana fraza , WyszukajChar , 1) " Porównanie binarne rozpoczynające się od pozycji 1. Zwraca 9. MyPos = Instr( 1, Szukana fraza , WyszukajChar , 0) " Domyślnie porównanie jest binarne " (pomija się ostatni argument). MójPos = Instr( Szukana fraza , WyszukajChar ) " Zwraca 9. MyPos = Instr( 1, Szukana fraza , „W” ) „Zwraca 0.

Często linie w programie zawierają niepotrzebne białe znaki na końcu lub na początku linii, które należy usunąć, ponieważ niepotrzebne spacje początkowe lub końcowe w linii mogą powodować problemy z programem.

VBA ma trzy funkcje przeznaczone do usuwania spacji początkowych i końcowych z ciągu: LPrzytnij, RPrzytnij, Przytnij. Należy pamiętać, że te funkcje w rzeczywistości nie modyfikują oryginalnego ciągu, ale raczej zwracają kopię ciągu z usuniętymi dodatkowymi spacjami.

Określanie długości sznurka

Zwykle trzeba znać długość ciągu podczas formatowania wiadomości dla użytkownika lub podczas formatowania danych ciągu wprowadzanych przez procedurę do arkusza programu Excel lub dokumentu programu Word. VBA używa tej funkcji do tych celów Len. W poniższym zestawieniu pomiędzy nawiasami a słowem znajdują się dwie spacje.



Należy zachować ostrożność w przypadku ciągów o stałej długości. Ponieważ ciąg o stałej długości ma zawsze tę samą długość, funkcja Len zawsze zwraca zadeklarowaną długość ciągu, niezależnie od jego rzeczywistej długości. Na przykład, jeśli zmienna łańcuchowa StrokeName o stałej długości, która ma 15 znaków, w rzeczywistości zawiera słowo „słońce”, wówczas funkcja Len (nazwa obrysu) zwróci wynik 15. W tym przypadku, aby dowiedzieć się, jaka jest rzeczywista długość ciągu (w naszym przypadku - 6), musisz użyć następującej kombinacji funkcji: Len(Trim(Nazwa Obrysu)).

Porównywanie i wyszukiwanie ciągów

VBA ma dwie funkcje, które pomagają porównać ciągi znaków: StrComp, InStr.

Funkcja StrComp

Składnia


StrComp(String1, String2[, Porównaj])


String1, String2 - dowolne dwa wyrażenia łańcuchowe, które należy porównać.

Po wykonaniu StrComp zwracana jest jedna z następujących wartości:

  • -1 jeśli Ciąg1 jest mniejszy niż Ciąg2;
  • 0, jeśli String1 i String2 są równe;
  • 1, jeśli String1 jest większy niż String2.


Powyższa lista porównuje dwa ciągi w trybie tekstowym: „Ciąg domyślny” i „Ciąg domyślny”. Wynik porównania = 1, tj. „Ciąg domyślny” jest większy niż „Ciąg domyślny”.

Eksperymentuj z różnymi ciągami, aby lepiej zrozumieć, jak działa funkcja StrComp.

Funkcja InStr

Funkcja InStr pozwala określić, czy jeden ciąg zawiera inny ciąg.

Składnia


StrComp(String1, String2[, Porównaj])


String1, String2 - dowolne prawidłowe wyrażenia łańcuchowe. Funkcja sprawdza, czy String1 jest zawarty w String2.

Porównaj to opcjonalny argument, który może być dowolną z następujących predefiniowanych stałych (jeśli zostanie pominięty, użyte zostanie bieżące ustawienie Option Compare):

  • vbBinaryCompare - binarne porównanie dwóch ciągów znaków;
  • vbTextCompare - porównanie tekstu dwóch ciągów znaków;
  • vbDatabaseCompare — używany tylko w programie Microsoft Access.

Start - argument opcjonalny, jest wyrażeniem numerycznym i określa pozycję znaku w String1, od którego powinno rozpocząć się sprawdzanie.


InStr zwraca liczbę wskazującą pozycję znaku w String1, w którym znaleziono String2. Jeśli InStr nie znajdzie String2 w String1, zwracane jest 0. Jeśli String1 (lub String2) ma wartość Null, wówczas funkcja również zwraca Null.



Podział linii

Czasami konieczne jest podzielenie ciągu na części składowe. W VBA trzy funkcje rozwiązują ten problem: Lewo, prawo, środek.

Funkcja lewa

Składnia


Lewy (sznurek, długość)


Funkcja zwraca kopię ciągu, zaczynając od pierwszego znaku i uwzględniając liczbę znaków określoną przez Długość. Jeśli Długość jest liczbą większą niż rzeczywista długość ciągu, zwracane jest całe wyrażenie typu String.

Właściwa funkcja

Składnia


Prawa (sznur, długość)


Ciąg to dowolne prawidłowe wyrażenie łańcuchowe.

Długość - dowolna wartość liczbowa.


Funkcja zwraca kopię ciągu, zaczynając od ostatniego znaku i uwzględniając, od prawej do lewej, liczbę znaków określoną przez Długość. Jeśli Długość jest liczbą większą niż rzeczywista długość ciągu, zwracane jest całe wyrażenie typu String. Funkcja Right zawsze kopiuje znaki z końca ciągu na początek.

Funkcja średnia

Składnia


Środek (Ciąg, Początek, [, Długość])


Ciąg to dowolne prawidłowe wyrażenie łańcuchowe.

Długość, Początek - dowolne wartości liczbowe.


Funkcja Mid zwraca kopię ciągu znaków, zaczynając od pozycji znaku w ciągu określonej przez argument Start. Opcjonalny argument Długość określa liczbę znaków do skopiowania z String do Mid. Jeśli Start zawiera większą liczbę niż rzeczywista długość ciągu, zwracany jest pusty ciąg.



Znaki, których nie można wprowadzić z klawiatury

Często zdarza się, że trzeba wpisać znak, dla którego nie ma klawisza na klawiaturze (na przykład symbol praw autorskich). Inna sytuacja ma miejsce, gdy zachodzi potrzeba umieszczenia w ciągu znaków znaku usługi VBA (najczęstszym przypadkiem jest użycie podwójnych cudzysłowów).

Aby uwzględnić w ciągu znaków znaki, których nie można wprowadzić z klawiatury lub które mają specjalne znaczenie w języku VBA, należy użyć funkcji Chr.

Składnia


Chr (kod znaku)


Charcode — dowolne wyrażenie numeryczne będące prawidłowym kodem zestawu znaków używanego przez komputer. Musi być liczbą całkowitą z zakresu od 0 do 255.

Funkcja Chr przyjmuje jako argument pojedynczy znak i zwraca ciąg znaków zawierający znak odpowiadający temu kodowi. Ta funkcja jest używana w powyższych zestawieniach do podawania linii podczas wyświetlania komunikatu na ekranie Chr (13).


Ponieważ znaki rozpoczynające nową linię są bardzo ważne podczas formatowania wiadomości i innych danych łańcuchowych manipulowanych przez procedury VBA, istnieje kilka predefiniowanych stałych dla tych znaków, aby uniknąć konieczności używania funkcji Chr:

  • vbCr jest znakiem powrotu karetki. Odpowiednik Chr(13)
  • vbLf - przesunięcie znaku o jedną linię. Odpowiednik Chr(10)
  • vbCrLf - powrót karetki + znak przesunięcia o jedną linię. Odpowiednik Chr(13) + Chr(10)
  • vbTab - znak tabulacji. Odpowiednik Chr(9).

Aby wyświetlić listę symbol kodu musisz otworzyć system pomocy VBA i na żądanie „zestawy znaków” Zostanie wyświetlona odpowiednia tabela.



Formatowanie wartości danych

Bardzo często z tego czy innego powodu format danych wyjściowych programu nie do końca nam odpowiada. Problem ten rozwiązuje funkcja Format.

Funkcja Format VBA jest identyczna z funkcją Format w programie Excel i używa tych samych symboli zastępczych formatowania danych.

Składnia


Format (wyrażenie [, format [, pierwszy dzień tygodnia [, pierwszy tydzień roku]]])


Wyrażenie - dowolne prawidłowe wyrażenie (wymagany argument).

Format jest prawidłowym wyrażeniem nazwanego lub zdefiniowanego przez użytkownika formatu.

Firstdayofweek to stała określająca pierwszy dzień tygodnia.

Firstweekofyear - stała określająca pierwszy tydzień roku.


Aby skorzystać z funkcji Format, musisz: ustawić predefiniowany format, Lub utwórz obraz o określonym formacie, używając znaków zastępczych.


Nazwane formaty do użycia z funkcją Format

Nazwany format Działanie
Data ogólna Formatuje informacje o dacie i godzinie w kolejny numer daty, korzystając z ustawień formatu daty i godziny dla tego komputera.
Długa randka Formatuje tylko część daty do daty sekwencyjnej, korzystając z ustawień formatu daty długiej komputera.
Średnia data Formatuje tylko część daty jako datę sekwencyjną, korzystając z ustawień średniego formatu daty w komputerze.
Krótka randka Formatuje tylko część zawierającą datę na datę sekwencyjną, korzystając z ustawień komputera dotyczących formatu daty krótkiej.
Długi czas Formatuje tylko część czasu do postaci kolejnej daty, korzystając z ustawień formatu długiego czasu komputera.
Średni czas Formatuje tylko część czasu do daty sekwencyjnej, korzystając z ustawień średniego formatu czasu komputera.
Krótki czas Formatuje tylko część czasu do daty sekwencyjnej, korzystając z ustawień komputera dotyczących formatu krótkiego czasu.
Numer ogólny Formatuje liczbę na ciąg znaków bez żadnych znaków specjalnych.
Waluta Formatuje liczbę z symbolem waluty, separatorem tysięcy i tylko dwoma miejscami po przecinku.
Naprawił Formatuje liczbę w taki sposób, że przed przecinkiem dziesiętnym zawsze znajduje się co najmniej jedna cyfra, a po nim co najmniej dwie cyfry.
Standard Formatuje liczbę z separatorem tysięcy w taki sposób, aby przed separatorem dziesiętnym znajdowała się co najmniej jedna cyfra, a po nim co najmniej dwie cyfry.
Procent Formatuje liczbę jako wartość procentową, mnożąc ją przez 100 i dodając symbol procentu.
Naukowy Formatuje liczbę do zwykłego formatu wykładniczego.
Tak nie Jeśli sformatowana liczba jest różna od zera, zwracany jest ciąg „Tak” lub „Nie”.
Prawda fałsz Jeśli sformatowana liczba jest różna od zera, zwracany jest ciąg „True”, w przeciwnym razie – „False”.
Wł./wył Jeśli sformatowana liczba jest różna od zera, zwracany jest ciąg „On” lub „Off”.

Elementy zastępcze do tworzenia niestandardowych formatów

Znak zastępczy Akcja (na przykładzie numeru 1234.45)
0 Znak numeryczny wyświetlający cyfrę, jeśli znajduje się ona na tej pozycji, lub 0, jeśli jej nie ma. Symbolu 0 można używać do wyświetlania zer wiodących w przypadku liczb całkowitych i zer końcowych w przypadku miejsc dziesiętnych: 00000.000 wyświetla 01234.450
# Symbol numeryczny wyświetla cyfrę, jeśli znajduje się ona na tej pozycji, w przeciwnym razie nie wyświetla niczego. Znak wypełniający # jest równoważny 0, z tą różnicą, że zera początkowe i końcowe nie są wyświetlane: #####.### wyświetla 1234,45
$ Wyświetla znak dolara: $###,###.00 wyświetla 1234,45 USD
. Dziesiętny znak zastępczy, wyświetla przecinek dziesiętny w wyznaczonej pozycji w ciągu znaków zastępczych 0: #.##.## wyświetla 1234,45
% Symbol procentu, mnoży wartość przez 100 i dodaje znak procentu w miejscu wskazanym przez symbole zastępcze. 0:#.#0.00% wyświetla liczbę 0.12345 jako 12,35% (następuje zaokrąglenie)
, Separator tysięcy, dodaje przecinki jako separatory tysięcy w ciągach zastępczych 0 i #: ###,###,###.00 wyświetla 1234,45
E-e- Wyświetla wartość w formacie wykładniczym z wykładnikiem tylko dla wartości ujemnych: #.####E-00 wyświetla 1.23445E03
E+ e+ Wyświetla wartość w formacie wykładniczym z wykładnikiem zarówno dla wartości ujemnych, jak i dodatnich: #.####E+00 wyświetla 1.23445E+03
/ Oddziela dzień, miesiąc i rok w celu formatowania wartości dat.
M Określa sposób wyświetlania miesięcy w datach: m wyświetla 1, mm - 01, mmm - styczeń, mmmm - styczeń
D Określa sposób wyświetlania dni w datach: d wyświetla 1, dd - 01, ddd - niedziela, dddd - niedziela
y Wyświetla dzień roku jako liczbę od 1 do 366
yy Określa sposób wyświetlania lat w datach: rr - 66, rrrr - 1966
Q Wyświetla kwartał roku jako liczbę od 1 do 4
w Wyświetla dzień tygodnia jako liczbę (1 - niedziela)
w W Wyświetla tydzień roku jako liczbę od 1 do 54
: Oddziela godziny, minuty i sekundy w wartościach formatu czasu: gg:mm:ss - 01:01:01, h:m:s - 1:1:1
H Określa sposób wyświetlania godzin: gg - 01, h - 1
M Określa sposób wyświetlania minut: mm - 01, m - 1
S Określa sposób wyświetlania sekund: ss - 01, s - 1
AM/PM Wyświetla czas w formacie 12-godzinnym z dodanym AM lub PM
@ Symbol zastępczy znaku, który wyświetla spację, jeśli w sformatowanym ciągu nie ma pasującego znaku.
Wyświetla wszystkie znaki wielkimi literami.
> Wyświetla wszystkie znaki małymi literami.
Chr

Funkcja Chr

Chr(CharCode)
Chr $ (kod znaku)
ChrB(kod znaku)
ChrW(CharCode)

Funkcjonować Chr(Ch działać R) pozwala uzyskać znak na podstawie wartości jego kodu numerycznego ANSI lub Unicode

Wartość zwracana

Funkcje Chr, ChrB, ChrW zwraca wartość podtypu String typu Variant zawierającą znak odpowiadający określonemu kodowi znaku ANSI lub Unicode. Funkcje Chr$, ChrB$, ChrW$ zwróć odpowiednio wartość typu String

Notatka

Chr I Chr$ zwraca znak według jego kodowania ANSI
ChrB I ChrB$ powrót jednobajtowy linia
ChrW zwraca znak Unicode, jednak w systemach innych niż Unicode jego zachowanie jest podobne Chr
Użyj w parametrze Kod Char wartości większe niż 255 generują błędy wykonania 5: Nieprawidłowe wywołanie procedury lub argument lub 6: Przepełnienie

Opcje CharCode Wymaganym argumentem jest wartość typu Long, która określa znak. Zwykle funkcja Chr używany podczas wstawiania znaków niedrukowalnych do ciągów tekstowych (powrót karetki, przesunięcie wiersza, tabulator itp.). Kody 0-31 odpowiadają standardowym znakom kontrolnym ASCII. Na przykład, Chr(10) zwraca znak nowej linii Przykład Powrót przyciemnienia = Chr(65) Debug.Print przywracanie " zwraca A Kategoria

W części poświęconej pytaniu Ludzie proszę wyjaśnić szczegółowo, co oznacza funkcja ord(x) i jej odwrotność chr(x) w języku Pascal? podane przez autora Nicka Browna najlepsza odpowiedź brzmi Istnieje specjalna tabela znaków (rozszerzony kod ASCII, gdy każdy znak ma wartość liczbową, w sumie w tabeli jest 255 wartości, czyli każdemu znakowi przypisana jest liczba,
chr(0..254) konwertuje liczbę (jeden bajt) na znak do którego ta liczba należy, np. chr(71) efektem będzie litera „G”, także wciśnięcie klawiszy na klawiaturze generuje własny kod, to jest dokładnie ten kod, który zostanie umieszczony w tym operatorze i da wynik, który klawisz został naciśnięty, to jest na przykład ja. Ale operator ORD(x) wykonuje ten proces w odwrotnej kolejności.
Ustawiamy znak wartości i otrzymujemy liczbę od 0 do 254 (jeden bajt)
na przykład ORD("G") da nam wynik 71 (w formacie dziesiętnym)
To wszystko na co wygląda!!!

Odpowiedź od Kationachik[Nowicjusz]
To naprawdę proste)
Ord („X”) – zwróci kod znaku X z tabeli ASKII.
Wynikiem funkcji odwrotnej będzie symbol odpowiadający wprowadzonemu kodowi (z którego pobierana jest funkcja) z tej samej tabeli ASCII.


Odpowiedź od Jurij[guru]
To nie są funkcje wzajemne!
Funkcja Ord zwraca wartość porządkową typu wyliczeniowego.
Liczenie zaczyna się od zera.
Dla typu bajt funkcja zwróci wartość rzeczywistą - liczba porządkowa pokrywa się z wartością.
Dla typu char funkcja zwróci numer seryjny znaku, który (liczba jest losowa) pokrywa się z kodem ASCII.
Funkcja chr zwraca znak o podanym kodzie ASCII.
Wniosek: Po prostu, jeśli chodzi o wartości symboliczne, w rzeczywistości działają one jako odwrotność siebie...
Dlatego możemy powiedzieć, że funkcja ord jest odwrotnością funkcji chr, ale nie odwrotnie - funkcja chr nie jest odwrotnością funkcji ord, ponieważ zakres funkcji ord nie ogranicza się do pracy z symbolami!