VBA String Manipulation Functions & Operatorer

⚡ Smart sammanfattning

VBA-strängmanipuleringsfunktioner och Operatorer kombinerar, mäter och extract-text inuti Excel-makron. Den här sidan förklarar sammanfogningsoperatorn, funktionerna Left, Right, Mid, Len och InStr, delning och koppling, och de fel som oftast orsakar strängkodsfel.

  • 🔤 Strängdata: Ett värde som är byggt av tecken, symboler och siffror, till exempel texten Jul-2015.
  • ➕ sammanlänkning Operator: Et-tecknet förbinder två strängar, så ”John” och ”Doe” returnerar John Doe.
  • ✂️ ExtracFunktioner: Vänster, Höger och Mitten hämtar en delsträng från början, slutet eller mitten av ett värde.
  • 📏 Mätfunktioner: Len räknar tecken och InStr returnerar positionen där en delsträng börjar.
  • 🧩 Dela och gå med: Split bryter upp en avgränsad sträng till en array, och Join bygger om en array till en enda sträng.
  • ⚠️ Vanliga fel: Typfelmatchning, InStr som returnerar noll och efterföljande mellanslag orsakar de flesta misslyckade jämförelser.

VBA-strängmanipuleringsfunktioner och Operatorer

VBA-sträng Operatorer

Strängdata används för att hålla data som består av siffror, tecken och symboler. "Jul-2015" är ett exempel på en strängdata. Den består av

  • Karaktärer (jul)
  • Symbol (-)
  • Numbers Lagring

Strängoperatorer används för att manipulera strängdata. Du kan till exempel sammanfoga värdet för juli-2015 från de tre första bokstäverna i månaden och året som "Jul-3".

Följande tabell visar sammanlänknings-VBA-strängoperatorn.

S / N Operator BESKRIVNING Exempelvis Produktion
1 & Sammanfoga: Denna operator används för att sammanfoga strängar "John" & "Doe" Per Andersson

Exempelkälla Code

VBA-sträng Operators Exempelkälla Code

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

Att köra ovanstående kod ger följande resultat

VBA-sträng Operators Exempelkälla Code

Et-tecknet är inte den enda symbolen som förekommer i text, och skillnaden mellan de två spelar roll när siffror är inblandade.

Skillnaden mellan & och + för strängsammanfogning

VBA accepterar både et-tecknet och plustecknet mellan två textvärden, så nybörjare behandlar dem ofta som utbytbara. De beter sig olika så snart en operand är ett tal eller ett tomt värde, och bara ett av dem är säkert.

Beteende & (Ampersand) + (Plus)
Två textvärden Ansluter sig till dem: "Guru” & ”99” returnerar Guru99 Ansluter sig till dem: "Guru” + ”99” returnerar Guru99
Text och ett nummer Konverterar talet till text: "Ålder" och 30 returnerar Ålder 30 Genererar ett felmeddelande om typmatchningsfel
Två numeriska strängar "10" och "5" returnerar 105 "10" + "5" kan addera och returnera 15
Ett nullvärde Behandlar Null som en tom sträng Returnerar Null och ignorerar hela resultatet

💡 Tips: Använd alltid et-tecknet för sammanfogning och spara plustecknet för aritmetiska operationerSätt ett mellanslag före och efter et-tecknet, eftersom Total& läses av VBA som ett Long-deklarationstecken.

VBA String Manipulation Funktioner

VBA String Manipulation är ett viktigt inslag i Excel VBA för makroprogrammering och strängoperationer. Excel tillhandahåller olika typer av VBA String Manipulation-funktioner som:

  • Vänsteranvänds för att t.ex.tract tecken från vänster sida av strängen
  • Högeranvänds för att t.ex.tract tecken från höger sida av strängen
  • Midanvänds för att t.ex.tracen delsträng från mitten av en sträng
  • Len: används för att hitta längden på en sträng
  • InStr: används för att hitta positionen för en delsträng i en sträng
  • Trimanvänds för att ta bort mellanslag från båda ändarna av en sträng
  • ersättaanvänds för att byta ut varje förekomst av en delsträng mot en annan
  • UCase / LCaseanvänds för att konvertera en sträng till versaler eller gemener

Tabellen nedan visar syntaxen för varje funktion med ett utfört exempel, så att du kan kopiera mönstret direkt till ett makro.

Funktion syntax Exempelvis Produktion
Vänster Vänster(sträng, längd) Vänster(“Jul-2015”, 3) juli
Höger Höger(sträng, längd) Höger(“Jul-2015”, 4) 2015
Mid Mitten (sträng, start, längd) Mitten ("juli-2015", 5, 4) 2015
Len Len(sträng) Len(“Juli-2015”) 8
InStr InStr(start, sträng, delsträng) InStr(1, "Jul-2015", "-") 4
Trim Trim(sträng) Trim(" Guru99”) Guru99
ersätta Ersätt(sträng, hitta, ersätt) Ersätt(“Jul-2015”, “-“, “/”) 2015 juli
UCase UCase(sträng) UCase("guru99") GURU99

Makrot nedan kombinerar flera av dessa funktioner för att återskapa en datumetikett från dess delar.

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

När makrot körs visas juli 2015. Varje funktion returnerar ett nytt värde och lämnar den ursprungliga strängen orörd, vilket är anledningen till att resultaten säkert kan kombineras i ett enda uttryck.

Dessa funktioner arbetar alla på en sträng i taget. När ett enda värde innehåller en hel lista hanterar två andra funktioner det bättre.

Hur man delar och sammanfogar strängar i VBA

Data som klistras in i Excel kommer ofta som ett långt värde med en avgränsare mellan varje element, till exempel "Pepsi, Coca-Cola, Fanta, Juice". Att läsa det med Mid och InStr är långsamt och känsligt. VBA tillhandahåller ett matchande par av funktioner för just detta jobb.

Split tar en avgränsad sträng och returnerar en nollbaserad array, med ett element per objekt. Ansluta sig gör det omvända, tar en array och returnerar en enda sträng med en avgränsare mellan elementen. Observera att Join fungerar på en array, inte på två separata strängar.

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

Loopen skriver varje dryck till en egen kalkylbladsrad, och meddelanderutan visar sedan Pepsi | Coca-Cola | Fanta | Juice. Tre punkter gör detta mönster tillförlitligt i produktionskod:

  • Nollbaserat resultat: Split returnerar alltid en array numrerad från 0, oavsett vad Option Base är inställd på, så kör loopen med LBound och UBound snarare än ett fast nummer.
  • Deklarera som String(): Tilldela resultatet till en dynamisk strängmatris. Om en fast storlek deklareras först orsakas ett kompileringsfel.
  • Tom inmatning: Att dela en tom sträng returnerar en array utan element, så testa med UBound innan du läser Items(0).

Även med rätt funktion vald, misslyckas strängkod på ett litet antal förutsägbara sätt.

Vanliga VBA-strängfel och hur man åtgärdar dem

De flesta strängfel i Excel VBA har en kort lista med orsaker. Att identifiera symptomet sparar en lång felsökningssession.

  • Typmatchningsfel vid sammankoppling: Ett plustecken användes mellan text och ett nummer. Ersätt det med ett et-tecken, vilket konverterar talet automatiskt.
  • InStr returnerar 0: Delsträngen hittades inte. InStr returnerar 0 snarare än -1 vid fel, så testa för ett värde större än noll innan resultatet skickas till Mid.
  • Ogiltigt proceduranrop i mitten eller vänster: Den begärda längden är negativ, eller startpositionen är under 1. Skydda anropet med Len så att längden aldrig överstiger strängen.
  • Jämförelser som borde matcha men inte gör det: Efterföljande mellanslag från importerad data bryter likheten. Radbryt båda sidor i Trim och använd StrComp när gemener och skiftlägen ska ignoreras.
  • Text som inte blir ett nummer: Ett värde som "1 200" misslyckas i aritmetiken på grund av separatorn. Ta bort det med Replace innan du konverterar med CLng.

Ladda ner Excel som innehåller ovanstående kod

Ladda ner ovanstående Excel-fil Code

Vanliga frågor

En sträng med variabel längd rymmer upp till ungefär två miljarder tecken, och en sträng med fast längd rymmer upp till 65 400. En cell i kalkylbladet lagrar dock bara 32 767 tecken, så längre värden avkortas när de skrivs till ett ark.

Likhetstecknet jämför dem som standard med skiftlägeskänslighet. Använd StrComp(a, b, vbTextCompare) för ett resultat som inte är skiftlägeskänsligt, eller placera Option Compare Text högst upp i modulen för att ändra standardvärdet för hela modulen.

Et-tecknet konverterar varje operand till text innan den sammanfogas, så 10 & 5 returnerar strängen 105. Behåll värdena numeriska och lägg till dem först, sammanfoga sedan resultatet om det behöver visas i ett meddelande.

Ja. Beskriv ingången och önskad utgång, till exempeltract koden före det första bindestrecket, och en AI-assistent returnerar ett Left- och InStr-uttryck. Testa det mot kantfall som ett saknat bindestreck.

Ja. Klistra in ett kapslat uttryck som Mid med InStr inuti så delar en AI-assistent upp det i steg, namnger varje argument och flaggar det fall där InStr returnerar noll och anropet misslyckas.

Sammanfatta detta inlägg med: