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.

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
MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"
Het uitvoeren van de bovenstaande code levert het volgende resultaat op
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


