VBA-stringmanipulatiefuncties en Operaverdraaid

⚡ Slimme samenvatting

VBA-functies voor tekenreeksmanipulatie en Operators combineren, meten en extracTekst in Excel-macro's. Deze pagina legt de samenvoegingsoperator uit, de functies Left, Right, Mid, Len en InStr, het splitsen en samenvoegen van tekst, en de fouten die het vaakst voorkomen bij het werken met tekenreeksen.

  • 🔤 Tekstgegevens: Een waarde die is opgebouwd uit tekens, symbolen en cijfers, zoals de tekst Jul-2015.
  • ➕ Aaneenschakeling Operavoor: Het ampersand-teken verbindt twee tekenreeksen, dus "John" & "Doe" geeft John Doe terug.
  • ✂️ ExtracFuncties: Left, Right en Mid halen een deeltekenreeks uit het begin, einde of midden van een waarde.
  • 📏 Meetfuncties: Len telt tekens en InStr geeft de positie terug waar een substring begint.
  • 🧩 Splitsen en samenvoegen: Split splitst een door komma's gescheiden tekenreeks in een array, en Join bouwt een array weer op tot één enkele tekenreeks.
  • ⚠️ Veel voorkomende fouten: Typefouten, InStr dat nul retourneert en spaties aan het einde van een string zijn de meest voorkomende oorzaken van mislukte vergelijkingen.

VBA-functies voor tekenreeksmanipulatie en Operaverdraaid

VBA-reeks Operaverdraaid

String data wordt gebruikt om data vast te houden die bestaat uit getallen, tekens en symbolen. “Jul-2015” is een voorbeeld van string data. Het bestaat uit

  • Personages (juli)
  • Symbool (-)
  • Numbers (2015)

Stringoperatoren worden gebruikt om stringdata te manipuleren. U kunt bijvoorbeeld de waarde van juli-2015 samenvoegen van de eerste 3 letters van de maand en het jaar, zoals 'Jul-2015'.

De volgende tabel toont de VBA-tekenreeksoperator voor samenvoeging.

S / N Operator Beschrijving Voorbeeld uitgang
1 & Samenvoegen: Deze operator wordt gebruikt om strings aan elkaar te koppelen "John Doe" Mona

Voorbeeld Bron Code

VBA-reeks Operators Voorbeeld Bron Code

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

Het uitvoeren van de bovenstaande code levert het volgende resultaat op

VBA-reeks Operators Voorbeeld Bron Code

Het ampersand-teken is niet het enige symbool dat tekst lijkt te verbinden, en het verschil tussen de twee is belangrijk zodra er getallen in het spel zijn.

Verschil tussen & en + voor tekenreeksconcatenatie

VBA accepteert zowel het ampersand-teken als het plusteken tussen twee tekstwaarden, waardoor beginners ze vaak als uitwisselbaar beschouwen. Ze gedragen zich echter anders zodra een van de operanden een getal of een lege waarde is, en slechts één ervan is veilig.

Gedrag & (Ampersand) + (Plus)
Twee tekstwaarden Hij voegt zich bij hen: “Guru"& "99" retourneert Guru99 Hij voegt zich bij hen: “Guru” + “99” retourneert Guru99
Tekst en een getal Zet het getal om in tekst: “Leeftijd ” & 30 geeft als resultaat Leeftijd 30 Geeft een foutmelding vanwege een typefout.
Twee numerieke reeksen “10” & “5” geeft 105 terug “10” + “5” kan optellen en 15 teruggeven.
Een null-waarde Behandelt Null als een lege tekenreeks. Retourneert Null en negeert het hele resultaat.

💡Tip: Gebruik altijd het ampersand-teken voor het samenvoegen van tekst en reserveer het plusteken voor... rekenkundige bewerkingenPlaats een spatie voor en na het ampersand-teken, omdat VBA het schrijven van Total& interpreteert als een declaratieteken van het type Long.

Manipulatiefuncties voor VBA-tekenreeksen

VBA String Manipulatie is een belangrijk element in Excel VBA voor macroprogrammering en stringbewerkingen. Excel biedt verschillende typen VBA String Manipulation-functies, zoals:

  • Links: wordt gebruikt om uit tetract tekens vanaf de linkerkant van de tekenreeks
  • Rechts: wordt gebruikt om uit tetract tekens vanaf de rechterkant van de tekenreeks
  • Midden: wordt gebruikt om uit tetraceen deelreeks uit het midden van een tekenreeks
  • Len: wordt gebruikt om de lengte van een string te vinden
  • InStr: wordt gebruikt om de positie van een substring in een string te vinden
  • trimmen: wordt gebruikt om spaties aan beide uiteinden van een tekenreeks te verwijderen.
  • vervangen: wordt gebruikt om elke voorkomende instantie van een substring te vervangen door een andere
  • UCase / LCase: worden gebruikt om een ​​tekenreeks om te zetten naar hoofdletters of kleine letters.

De onderstaande tabel toont de syntaxis van elke functie met een uitgewerkt voorbeeld, zodat u het patroon direct in een macro kunt kopiëren.

Functie Syntaxis Voorbeeld uitgang
Links Links(string, lengte) Links(“juli 2015”, 3) Kerst
Rechts Rechts(string, lengte) Rechts (“juli 2015”, 4) 2015
Midden Midden(string, begin, lengte) Midden(“juli 2015”, 5, 4) 2015
Len Len(string) Len (“juli 2015”) 8
InStr InStr(start, string, substring) InStr(1, “juli-2015”, “-“) 4
trimmen Trim (touw) Trim(” Guru99 “) Guru99
vervangen Vervangen(string, zoeken, vervangen) Vervangen(“Jul-2015”, “-“, “/”) Juli / 2015
UCase UCase(string) UCase (“guru99”) GURU99

De onderstaande macro combineert verschillende van deze functies om een ​​datumlabel uit de verschillende onderdelen opnieuw op te bouwen.

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

Het uitvoeren van de macro geeft Jul-2015 weer. Elke functie retourneert een nieuwe waarde en laat de oorspronkelijke tekenreeks ongewijzigd, waardoor de resultaten veilig in één expressie kunnen worden gecombineerd.

Deze functies werken allemaal met één tekenreeks tegelijk. Wanneer een enkele waarde een hele lijst bevat, zijn twee andere functies daar beter geschikt voor.

Hoe splits en voeg je tekenreeksen samen in VBA?

Gegevens die in Excel worden geplakt, komen vaak binnen als één lange waarde met een scheidingsteken tussen elk item, zoals "Pepsi,Coke,Fanta,Juice". Het lezen hiervan met Mid en InStr is traag en onbetrouwbaar. VBA biedt een passend paar functies voor precies deze taak.

Split Deze functie neemt een door komma's gescheiden tekenreeks als invoer en retourneert een array die begint bij nul, met één element per item. Open De `Join`-functie doet het omgekeerde: hij neemt een array en retourneert één enkele tekenreeks met een scheidingsteken tussen de elementen. Merk op dat `Join` werkt op een array, niet op twee afzonderlijke tekenreeksen.

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

De lus schrijft elk drankje naar een eigen rij in het werkblad, waarna het berichtvenster Pepsi | Coca-Cola | Fanta | Sap weergeeft. Drie punten maken dit patroon betrouwbaar in productiecode:

  • Resultaat gebaseerd op nul: Split retourneert altijd een array die begint bij 0, ongeacht de waarde van Option Base. Gebruik daarom LBound en UBound om de lus aan te sturen in plaats van een vast getal.
  • Declareer als String(): Wijs het resultaat toe aan een dynamische String-array. Het eerst declareren van een array met een vaste grootte veroorzaakt een compilatiefout.
  • Lege invoer: Het splitsen van een lege tekenreeks levert een array zonder elementen op, dus test met UBound voordat je Items(0) leest.

Zelfs met de juiste functiekeuze faalt stringcode op een klein aantal voorspelbare manieren.

Veelvoorkomende VBA-tekenreeksfouten en hoe u deze kunt oplossen

De meeste tekenreeksfouten in Excel VBA hebben een beperkt aantal oorzaken. Door het symptoom te herkennen, bespaar je een lange debugsessie.

  • Typefout bij samenvoeging: Er werd een plusteken gebruikt tussen tekst en een getal. Vervang dit door een ampersand, waardoor het getal automatisch wordt omgezet.
  • InStr retourneert 0: De substring is niet gevonden. InStr retourneert 0 in plaats van -1 bij een fout, dus controleer of de waarde groter is dan nul voordat je het resultaat doorgeeft aan Mid.
  • Ongeldige procedureaanroep in Mid of Left: De gevraagde lengte is negatief, of de startpositie is lager dan 1. Beveilig de aanroep met Len zodat de lengte nooit de tekenreeks overschrijdt.
  • Vergelijkingen die zouden moeten overeenkomen, maar dat niet doen: Achterliggende spaties in geïmporteerde gegevens verstoren de gelijkheid. Plaats beide zijden in Trim en gebruik StrComp wanneer hoofdlettergevoeligheid genegeerd moet worden.
  • Tekst die niet in een getal wordt omgezet: Een waarde zoals "1,200" kan niet correct worden berekend vanwege het scheidingsteken. Verwijder het scheidingsteken met Replace voordat u de waarde converteert met CLng.

Download Excel met bovenstaande code

Download het bovenstaande Excel-bestand. Code

Veelgestelde vragen

Een tekenreeks met variabele lengte kan tot ongeveer twee miljard tekens bevatten, en een tekenreeks met vaste lengte tot 65,400 tekens. Een cel in een werkblad kan echter slechts 32,767 tekens opslaan, waardoor langere waarden worden afgekapt wanneer ze naar een werkblad worden geschreven.

Het gelijkheidsteken vergelijkt de waarden standaard hoofdlettergevoelig. Gebruik StrComp(a, b, vbTextCompare) voor een resultaat dat niet hoofdlettergevoelig is, of plaats Option Compare Text bovenaan de module om de standaardinstelling voor de hele module te wijzigen.

Het ampersand-teken zet elke operand om in tekst voordat ze worden samengevoegd, dus 10 & 5 levert de tekenreeks 105 op. Houd de waarden numeriek en tel ze eerst op, en voeg het resultaat vervolgens samen als het in een bericht moet verschijnen.

Ja. Beschrijf de invoer en de gewenste uitvoer, bijvoorbeeld:tracVoer de code in vóór het eerste streepje, en een AI-assistent geeft een Left- en InStr-expressie terug. Test dit op uitzonderlijke gevallen, zoals een ontbrekend streepje.

Ja. Plak een geneste expressie zoals Mid met InStr erin en een AI-assistent splitst deze op in stappen, benoemt elk argument en markeert het geval waarin InStr nul retourneert en de aanroep mislukt.

Vat dit bericht samen met: