VBA-strengmanipulasjonsfunksjoner og Operatorer

โšก Smart oppsummering

VBA-strengmanipuleringsfunksjoner og Operatorer kombinerer, mรฅler og ekskluderertract-tekst i Excel-makroer. Denne siden forklarer sammenkoblingsoperatoren, funksjonene Left, Right, Mid, Len og InStr, deling og sammenfรธyning, og feilene som oftest รธdelegger strengkoden.

  • ๐Ÿ”ค Strengdata: En verdi bygget opp av tegn, symboler og tall, for eksempel teksten Jul-2015.
  • โž• sammenkjeding Operator: &-tegnet forbinder to strenger, sรฅ ยซJohnยป og ยซDoeยป returnerer John Doe.
  • โœ‚๏ธ ExtracFunksjoner: Venstre, Hรธyre og Midt trekker en delstreng fra starten, slutten eller midten av en verdi.
  • ๐Ÿ“ Mรฅlefunksjoner: Len teller tegn og InStr returnerer posisjonen der en delstreng begynner.
  • ๐Ÿงฉ Splitt og bli med: Split deler รฉn avgrenset streng inn i en matrise, og Join gjenoppbygger en matrise til รฉn enkelt streng.
  • โš ๏ธ Vanlige feil: Typeavvik, InStr som returnerer null og etterfรธlgende mellomrom forรฅrsaker de fleste mislykkede sammenligninger.

VBA-strengmanipuleringsfunksjoner og Operatorer

VBA-streng Operatorer

Strengdata brukes til รฅ holde data som bestรฅr av tall, tegn og symboler. "Jul-2015" er et eksempel pรฅ en strengdata. Den bestรฅr av

  • Karakterer (jul)
  • Symbol (-)
  • Numbers (2015)

Strengeoperatorer brukes til รฅ manipulere strengdata. Du kan for eksempel sette sammen verdien av juli-2015 fra de tre fรธrste bokstavene i mรฅneden og รฅret som "Jul-3".

Fรธlgende tabell viser sammenkoblings-VBA-strengoperatoren.

S / N Operator Tekniske beskrivelser Eksempel Produksjon
1 & Konkatener: Denne operatoren brukes til รฅ sette sammen strenger ยซJohnยป og ยซDoeยป John Doe

Eksempelkilde Code

VBA-streng Operators Eksempelkilde Code

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

Utfรธrelse av koden ovenfor gir fรธlgende resultat

VBA-streng Operators Eksempelkilde Code

&-tegnet er ikke det eneste symbolet som ser ut til รฅ bli med i tekst, og forskjellen mellom de to spiller en rolle nรฅr tall er involvert.

Forskjellen mellom & og + for strengsammenkobling

VBA aksepterer bรฅde og-tegnet og plusstegnet mellom to tekstverdier, sรฅ nybegynnere behandler dem ofte som utskiftbare. De oppfรธrer seg annerledes sรฅ snart รฉn operand er et tall eller en tom verdi, og bare รฉn av dem er trygg.

Atferd & (og-tegnet) + (pluss)
To tekstverdier Blir med dem: ยซGuruยซ&ยป returnerer Guru99 Blir med dem: ยซGuruยซ+ ยซ99ยป returnerer Guru99
Tekst og et tall Konverterer tallet til tekst: ยซAlderยป og 30 returnerer Alder 30 Oppstรฅr en feilmelding om typeavvik
To numeriske strenger ยซ10ยป og ยซ5ยป returnerer 105 ยซ10ยป + ยซ5ยป kan legge sammen og returnere 15
En nullverdi Behandler Null som en tom streng Returnerer null og forkaster hele resultatet

๐Ÿ’ก Tips: Bruk alltid og-tegnet for sammenkobling og reserver plusstegnet for aritmetiske operasjonerSett inn et mellomrom fรธr og etter og-tegnet, fordi skriving av Total& leses av VBA som et Long-deklarasjonstegn.

VBA-strengmanipulasjonsfunksjoner

VBA String Manipulation er et viktig element i Excel VBA for makroprogrammering og strengoperasjoner. Excel tilbyr ulike typer VBA-strengmanipulasjonsfunksjoner som:

  • Venstrebrukes til f.eks.tract tegn fra venstre side av strengen
  • Ikke santbrukes til f.eks.tract tegn fra hรธyre side av strengen
  • Midbrukes til f.eks.tracen delstreng fra midten av en streng
  • Len: brukes til รฅ finne lengden pรฅ en streng
  • InStr: brukes til รฅ finne posisjonen til en delstreng i en streng
  • Trimbrukes til รฅ fjerne mellomrom fra begge ender av en streng
  • Erstattbrukes til รฅ bytte ut hver forekomst av รฉn delstreng med en annen
  • UCase / LCasebrukes til รฅ konvertere en streng til store eller smรฅ bokstaver

Tabellen nedenfor viser syntaksen for hver funksjon med et utarbeidet eksempel, slik at du kan kopiere mรธnsteret direkte inn i en makro.

Funksjon syntax Eksempel Produksjon
Venstre Venstre(streng, lengde) Venstre(ยซjuli-2015ยป, 3) Jul
Ikke sant Hรธyre(streng, lengde) Hรธyre(ยซjuli-2015ยป, 4) 2015
Mid Midt(streng, start, lengde) Midt (ยซjuli 2015ยป, 5, 4) 2015
Len Lenge(streng) Len (ยซjuli 2015ยป) 8
InStr InStr(start, streng, delstreng) InStr(1, "Jul-2015", "-") 4
Trim Trim(streng) Trim(โ€ Guru99โ€) Guru99
Erstatt Erstatt(streng, finn, erstatt) Erstatt(โ€œJul-2015โ€, โ€œ-โ€œ, โ€œ/โ€) Jul / 2015
UCase UCase(streng) UCase("guru99") GURU99

Makroen nedenfor kombinerer flere av disse funksjonene for รฅ gjenoppbygge en datoetikett fra delene.

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 makroen kjรธres, vises juli 2015. Hver funksjon returnerer en ny verdi og lar den opprinnelige strengen vรฆre urรธrt, og det er derfor resultatene trygt kan kombineres i ett enkelt uttrykk.

Disse funksjonene fungerer alle pรฅ รฉn streng om gangen. Nรฅr รฉn enkelt verdi inneholder en hel liste, hรฅndterer to andre funksjoner den bedre.

Slik deler og kobler du sammen strenger i VBA

Data som limes inn i Excel kommer ofte som รฉn lang verdi med et skilletegn mellom hvert element, for eksempel ยซPepsi, Coke, Fanta, Juiceยป. Det er tregt og skjรธrt รฅ lese dette med Mid og InStr. VBA tilbyr et matchende par med funksjoner for akkurat denne jobben.

Dele tar en avgrenset streng og returnerer en nullbasert array, med ett element per element. Bli med gjรธr det motsatte, tar en array og returnerer en enkelt streng med et skilletegn mellom elementene. Merk at Join fungerer pรฅ en array, ikke pรฅ to separate strenger.

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

Lรธkken skriver hver drink inn i sin egen regnearksrad, og meldingsboksen viser deretter Pepsi | Coca-Cola | Fanta | Juice. Tre punkter gjรธr dette mรธnsteret pรฅlitelig i produksjonskode:

  • Nullbasert resultat: Split returnerer alltid en matrise nummerert fra 0, uansett hva Option Base er satt til, sรฅ kjรธr lรธkken med LBound og UBound i stedet for et fast tall.
  • Deklarer som streng(): Tilordne resultatet til en dynamisk strengmatrise. Hvis en fast stรธrrelse deklareres fรธrst, forรฅrsaker det en kompileringsfeil.
  • Tom inndata: ร… dele en tom streng returnerer en matrise uten elementer, sรฅ test med UBound fรธr du leser Items(0).

Selv med riktig funksjon valgt, feiler strengkode pรฅ et lite antall forutsigbare mรฅter.

Vanlige VBA-strengfeil og hvordan du fikser dem

De fleste strengfeil i Excel VBA kommer fra en kort liste over รฅrsaker. ร… gjenkjenne symptomet sparer en lang feilsรธkingsรธkt.

  • Typeavvik ved sammenkobling: Et plusstegn ble brukt mellom tekst og et tall. Erstatt det med et &-tegn, som konverterer tallet automatisk.
  • InStr returnerer 0: Delstrengen ble ikke funnet. InStr returnerer 0 i stedet for -1 ved feil, sรฅ test for en verdi stรธrre enn null fรธr du sender resultatet til Mid.
  • Ugyldig prosedyrekall i Midt eller Venstre: Den forespurte lengden er negativ, eller startposisjonen er under 1. Beskytt kallet med Len slik at lengden aldri overstiger strengen.
  • Sammenligninger som burde samsvare, men ikke samsvarer: Etterfรธlgende mellomrom fra importerte data bryter likheten. Bryt begge sider i Trim, og bruk StrComp nรฅr store og smรฅ bokstaver skal ignoreres.
  • Tekst som ikke blir til et tall: En verdi som ยซ1,200ยป mislykkes i aritmetikk pรฅ grunn av skilletegnet. Fjern den med Erstatt fรธr du konverterer med CLng.

Last ned Excel som inneholder koden ovenfor

Last ned Excel-filen ovenfor Code

Spรธrsmรฅl og svar

En streng med variabel lengde kan inneholde opptil omtrent to milliarder tegn, og en streng med fast lengde kan inneholde opptil 65 400. En regnearkcelle lagrer imidlertid bare 32 767 tegn, sรฅ lengre verdier blir avkortet nรฅr de skrives til et ark.

Likhetstegnet sammenligner dem som standard med skille mellom store og smรฅ bokstaver. Bruk StrComp(a, b, vbTextCompare) for et resultat som ikke skiller mellom store og smรฅ bokstaver, eller plasser Option Compare Text รธverst i modulen for รฅ endre standardinnstillingen for hele modulen.

&-tegnet konverterer hver operand til tekst fรธr den slรฅs sammen, sรฅ 10 og 5 returnerer strengen 105. Behold verdiene numeriske og legg dem sammen fรธrst, og slรฅ deretter sammen resultatet hvis det mรฅ vises i en melding.

Ja. Beskriv inngangen og รธnsket utgang, for eksempeltract koden fรธr den fรธrste bindestreken, og en AI-assistent returnerer et Left- og InStr-uttrykk. Test det mot kanttilfeller som en manglende bindestrek.

Ja. Lim inn et nestet uttrykk som Mid med InStr inni, sรฅ deler en AI-assistent det opp i trinn, navngir hvert argument og flagger tilfellet der InStr returnerer null og kallet mislykkes.

Oppsummer dette innlegget med: