Funkcje manipulacji ciągami VBA i Operatorsy

⚡ Inteligentne podsumowanie

Funkcje manipulacji ciągami VBA i Operatory łączą, mierzą i badajątracTekst wewnątrz makr Excela. Ta strona wyjaśnia operator konkatenacji, funkcje Left, Right, Mid, Len i InStr, dzielenie i łączenie oraz błędy, które najczęściej powodują uszkodzenie kodu ciągu znaków.

  • 🔤 Dane ciągu: Wartość złożona ze znaków, symboli i liczb, np. tekst Jul-2015.
  • Powiązanie Operasłup: Znak ampersand łączy dwa ciągi znaków, więc „John” i „Doe” zwraca John Doe.
  • ✂️. ExtracFunkcje cji: Left, Right i Mid wyciągają podciąg z początku, końca lub środka wartości.
  • 📏 Funkcje pomiarowe: Len zlicza znaki, a InStr zwraca pozycję, w której rozpoczyna się podciąg.
  • 🧩 Podziel i połącz: Split dzieli jeden ograniczony ciąg na tablicę, a Join przekształca tablicę w pojedynczy ciąg.
  • ⚠️ Powszechne błędy: Niezgodność typów, zwracanie zera przez funkcję InStr i końcowe spacje są przyczyną większości nieudanych porównań.

Funkcje manipulacji ciągami VBA i Operatorsy

Ciąg VBA Operatorsy

Dane typu string służą do przechowywania danych składających się z liczb, znaków i symboli. „Jul-2015” to przykład danych typu string. Składa się z

  • Postacie (lipiec)
  • Symbol (-)
  • Numbers (2015)

Operatorzy stringów służą do manipulowania danymi stringów. Na przykład możesz połączyć wartość July-2015 z pierwszych 3 liter miesiąca i roku, np. „Jul-2015”.

Poniższa tabela przedstawia operator łączenia ciągów znaków w języku VBA.

S / N OperaTor OPIS Przykład Wydajność
1 & Łączenie: Ten operator służy do łączenia ze sobą ciągów znaków. "Nieznany z nazwiska" nieznany z nazwiska

Przykładowe źródło Code

Ciąg VBA Operators Przykładowe źródło Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

Wykonanie powyższego kodu daje następujący wynik

Ciąg VBA Operators Przykładowe źródło Code

Znak & nie jest jedynym symbolem używanym do łączenia tekstu. Różnica między nimi staje się widoczna, gdy w grę wchodzą liczby.

Różnica między & i + w łączeniu ciągów znaków

VBA akceptuje zarówno znak ampersand, jak i znak plus między dwiema wartościami tekstowymi, dlatego początkujący często traktują je zamiennie. Zachowują się inaczej, gdy jeden z operandów jest liczbą lub wartością pustą, a tylko jeden z nich jest bezpieczny.

Zachowanie & (Amersand) + (Dodatkowo)
Dwie wartości tekstowe Dołącza do nich: „Guru„& „99” powraca Guru99 Dołącza do nich: „Guru” + „99” zwraca Guru99
Tekst i liczba Konwertuje liczbę na tekst: „Wiek” i 30 zwraca Wiek 30 Podnosi błąd niezgodności typu
Dwa ciągi liczbowe „10” i „5” zwracają 105 „10” + „5” może dodać i zwrócić 15
Wartość null Traktuje Null jako pusty ciąg Zwraca wartość Null i odrzuca cały wynik

💡 Wskazówka: Zawsze używaj znaku ampersand do łączenia i zarezerwuj znak plus dla działania arytmetyczne. Umieść spację przed i po znaku ampersand, ponieważ zapis Total& jest odczytywany przez VBA jako znak deklaracji typu Long.

Funkcje manipulacji ciągami VBA

Manipulacja ciągami VBA jest ważnym elementem w Excel VBA do programowania makr i operacje na ciągach. Excel udostępnia różne typy funkcji VBA String Manipulation, takie jak:

  • Lewa: jest używany dotract znaków z lewej strony ciągu
  • Prawa: jest używany dotracznaków z prawej strony ciągu
  • Średni: jest używany dotracpodciąg z środka ciągu
  • Len: służy do znalezienia długości łańcucha
  • Instr: służy do znalezienia pozycji podciągu w ciągu
  • Susz: służy do usuwania spacji z obu końców ciągu znaków
  • zastąpić: służy do zamiany każdego wystąpienia jednego podciągu na inny
  • UCase / LCase: służą do konwersji ciągu na wielkie lub małe litery

Poniższa tabela przedstawia składnię każdej funkcji wraz z przykładem jej działania, dzięki czemu możesz skopiować wzór bezpośrednio do makra.

Funkcjonować Składnia Przykład Wydajność
Lewa Lewo(ciąg, długość) Lewy(“lipiec-2015”, 3) LIP
Prawa Prawo(ciąg, długość) Prawo(“lipiec-2015”, 4) 2015
Średni Środek(struna, początek, długość) Środek(“lipiec-2015”, 5, 4) 2015
Len Len(ciąg) Len(“lipiec-2015”) 8
Instr InStr(start, string, podstring) InStr(1, „lip-2015”, „-”) 4
Susz Przytnij(ciąg) Przycinać(" Guru99 ") Guru99
zastąpić Zamień(ciąg, znajdź, zamień) Zamień („lipiec 2015 r.”, „-”, „/”) Lipiec/2015
UCase UCase(ciąg) UCase(“guru99”) GURU99

Poniższe makro łączy kilka z tych funkcji, aby odtworzyć etykietę daty z jej części.

Sub StringFunctionsDemo()
    Dim Source As String
    Dim MonthPart As String
    Dim YearPart As String

    Source = "July-2015"

    ' Take the first three characters
    MonthPart = Left(Source, 3)
    ' Take the last four characters
    YearPart = Right(Source, 4)

    MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions"
End Sub

Uruchomienie makra wyświetla wynik z lipca 2015 r. Każda funkcja zwraca nową wartość i pozostawia oryginalny ciąg znaków nienaruszony, dlatego wyniki można bezpiecznie połączyć w jednym wyrażeniu.

Wszystkie te funkcje działają na jednym ciągu znaków na raz. Gdy pojedyncza wartość zawiera całą listę, dwie inne funkcje radzą sobie z nią lepiej.

Jak dzielić i łączyć ciągi znaków w VBA

Dane wklejone do Excela często pojawiają się jako jedna długa wartość z separatorem między poszczególnymi elementami, na przykład „Pepsi, Coca-Cola, Fanta, Sok”. Odczyt tych danych za pomocą Mid i InStr jest powolny i niestabilny. VBA oferuje dopasowaną parę funkcji do tego zadania.

Split przyjmuje ograniczony ciąg znaków i zwraca tablicę zawierającą od zera elementy w jednym elemencie. Dołącz do rejestru Działa odwrotnie, pobierając tablicę i zwracając pojedynczy ciąg znaków z separatorem między elementami. Należy pamiętać, że funkcja Join działa na tablicy, a nie na dwóch oddzielnych ciągach znaków.

Sub SplitAndJoinDemo()
    Dim Source As String
    Dim Items() As String
    Dim i As Long

    Source = "Pepsi,Coke,Fanta,Juice"

    ' Break the value into an array on every comma
    Items = Split(Source, ",")

    For i = LBound(Items) To UBound(Items)
        Sheet1.Cells(i + 1, 1).Value = Items(i)
    Next i

    ' Rebuild the list with a different separator
    MsgBox Join(Items, " | "), vbOKOnly, "Joined List"
End Sub

Pętla zapisuje każdy napój w osobnym wierszu arkusza kalkulacyjnego, a w polu komunikatu wyświetla się Pepsi | Coca-Cola | Fanta | Sok. Trzy punkty sprawiają, że ten wzorzec jest niezawodny w kodzie produkcyjnym:

  • Wynik od zera: Funkcja Split zawsze zwraca tablicę numerowaną od 0, niezależnie od ustawienia Option Base, dlatego pętlę należy obsługiwać za pomocą LBound i UBound, a nie za pomocą stałej liczby.
  • Deklaracja jako String(): Przypisz wynik do dynamicznej tablicy ciągów znaków. Zadeklarowanie stałego rozmiaru powoduje błąd kompilacji.
  • Puste dane wejściowe: Podzielenie pustego ciągu zwraca tablicę bez elementów, dlatego przed odczytaniem Items(0) należy przeprowadzić test za pomocą UBound.

Nawet po wybraniu właściwej funkcji, kod łańcuchowy zawodzi w kilku przewidywalnych przypadkach.

Typowe błędy w ciągach VBA i jak je naprawić

Większość błędów w ciągach znaków w programie Excel VBA wynika z krótkiej listy przyczyn. Rozpoznanie symptomu oszczędza długą sesję debugowania.

  • Niezgodność typów podczas łączenia: Między tekstem a liczbą zastosowano znak plus. Zastąp go znakiem ampersand, który automatycznie przekonwertuje liczbę.
  • InStr zwraca 0: Podciąg nie został znaleziony. Funkcja InStr zwraca 0 zamiast -1 w przypadku błędu, dlatego przed przekazaniem wyniku do Mid należy sprawdzić, czy występuje wartość większa od zera.
  • Nieprawidłowe wywołanie procedury w Mid lub Left: Żądana długość jest ujemna lub pozycja początkowa jest mniejsza niż 1. Zabezpiecz wywołanie za pomocą Len, aby długość nigdy nie przekroczyła ciągu.
  • Porównania, które powinny pasować, ale tak nie jest: Spacje końcowe z importowanych danych przerywają równość. Zawiń obie strony w Trim i użyj StrComp, gdy wielkość liter ma być ignorowana.
  • Tekst, który nie będzie liczbą: Wartość taka jak „1,200” nie przechodzi obliczeń arytmetycznych z powodu separatora. Usuń ją za pomocą funkcji Replace przed konwersją za pomocą CLng.

Pobierz Excel zawierający powyższy kod

Pobierz powyższy plik Excel Code

FAQ

Ciąg o zmiennej długości może pomieścić do około dwóch miliardów znaków, a ciąg o stałej długości do 65 400. Komórka arkusza kalkulacyjnego przechowuje jednak tylko 32 767 znaków, więc dłuższe wartości są obcinane podczas zapisywania w arkuszu.

Znak równości domyślnie porównuje je z uwzględnieniem wielkości liter. Użyj StrComp(a, b, vbTextCompare), aby uzyskać wynik bez uwzględniania wielkości liter, lub umieść Option Compare Text na górze modułu, aby zmienić ustawienie domyślne dla całego modułu.

Znak ampersand konwertuje każdy operand na tekst przed połączeniem, więc 10 i 5 zwraca ciąg 105. Zachowaj wartości numeryczne i najpierw je dodaj, a następnie połącz wynik, jeśli musi pojawić się w komunikacie.

Tak. Opisz dane wejściowe i oczekiwane dane wyjściowe, na przykład np.tracWklej kod przed pierwszym myślnikiem, a asystent AI zwróci wyrażenie Left i InStr. Przetestuj to pod kątem przypadków skrajnych, takich jak brakujący myślnik.

Tak. Wklej zagnieżdżone wyrażenie, takie jak Mid z InStr, a asystent AI podzieli je na kroki, nazwie każdy argument i oznaczy przypadek, w którym InStr zwróci zero i wywołanie się nie powiedzie.

Podsumuj ten post następująco: