Funkcije za manipulaciju nizovima VBA & Operaulagatelji

โšก Pametni saลพetak

VBA funkcije za manipulaciju stringovima i Operatori kombiniraju, mjere i iskaลพutract tekst unutar Excel makronaredbi. Ova stranica objaลกnjava operator spajanja, funkcije Left, Right, Mid, Len i InStr, dijeljenje i spajanje te pogreลกke koje najฤeลกฤ‡e prekidaju kod stringa.

  • ๐Ÿ”ค Podaci niza: Vrijednost izgraฤ‘ena od znakova, simbola i brojeva, kao ลกto je tekst srpanj-2015.
  • โž• povezan u lanac Operator: Ampersand spaja dva niza znakova, pa "John" i "Doe" vraฤ‡aju John Doe.
  • โœ‚๏ธ ExtracFunkcije: Lijevo, desno i sredina povlaฤe podniz s poฤetka, kraja ili sredine vrijednosti.
  • ๐Ÿ“ Mjerne funkcije: Len broji znakove, a InStr vraฤ‡a poziciju gdje poฤinje podniz.
  • ๐Ÿงฉ Podijeli i spoji: Split razdvaja jedan razgraniฤeni niz u niz, a Join ponovno izgraฤ‘uje niz u jedan niz.
  • โš ๏ธ Uobiฤajene pogreลกke: Neusklaฤ‘enost tipova, InStr koji vraฤ‡a nulu i razmaci na kraju uzrokuju veฤ‡inu neuspjelih usporedbi.

VBA funkcije za manipulaciju stringovima i Operaulagatelji

VBA niz Operaulagatelji

Podaci niza koriste se za drลพanje podataka koji se sastoje od brojeva, znakova i simbola. "Jul-2015" je primjer niza podataka. Sastoji se od

  • Likovi (srpanj)
  • Simbol (-)
  • Numbers (2015)

String operatori se koriste za manipuliranje string podacima. Na primjer, moลพete spojiti vrijednost srpnja 2015. od prva 3 slova mjeseca i godine kao ลกto je "srpanj 2015".

Sljedeฤ‡a tablica prikazuje VBA operator niza za ulanฤavanje.

S / N Operahumka Description Primjer Izlaz
1 & Ulanฤavanje: Ovaj se operator koristi za ulanฤavanje nizova โ€œJohnโ€ & โ€œDoeโ€ prosjeฤan ฤovjek

Primjer Izvor Code

VBA niz OperaPrimjer izvora Code

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

Izvrลกenje gornjeg koda daje sljedeฤ‡i rezultat

VBA niz OperaPrimjer izvora Code

Znak & nije jedini simbol koji se pojavljuje za spajanje teksta, a razlika izmeฤ‘u njih je bitna kada su u pitanju brojevi.

Razlika izmeฤ‘u & i + za spajanje stringova

VBA prihvaฤ‡a i ampersand i znak plus izmeฤ‘u dvije tekstualne vrijednosti, pa ih poฤetnici ฤesto tretiraju kao zamjenjive. Ponaลกaju se drugaฤije ฤim je jedan operand broj ili prazna vrijednost, a samo je jedan od njih siguran.

ponaลกanje & (ampersand) + (plus)
Dvije tekstualne vrijednosti Pridruลพuje im se: โ€žGuru" i "99" vraฤ‡a Guru99 Pridruลพuje im se: โ€žGuru" + "99" vraฤ‡a Guru99
Tekst i broj Pretvara broj u tekst: โ€žDobโ€œ i 30 vraฤ‡a Dob 30 Izaziva greลกku neusklaฤ‘enosti tipova
Dva numeriฤka niza "10" i "5" vraฤ‡a 105 "10" + "5" moลพe se zbrojiti i vratiti 15
Null vrijednost Tretira Null kao prazan niz Vraฤ‡a Null i odbacuje cijeli rezultat

๐Ÿ’ก Savjet: Uvijek koristite ampersand za spajanje, a znak plus rezervirajte za aritmetiฤke operacijeStavite razmak prije i poslije znaka &, jer VBA ฤita Total& kao deklaracijski znak tipa Long.

VBA funkcije za manipulaciju nizovima

VBA manipulacija nizovima vaลพan je element u Excel VBA za programiranje makronaredbi i string operacije. Excel nudi razne vrste funkcija VBA manipulacije nizovima kao ลกto su:

  • Lijevo: koristi se za extract znakova s โ€‹โ€‹lijeve strane niza
  • Desna: koristi se za extract znakova s โ€‹โ€‹desne strane niza
  • Srednji: koristi se za extracpodniz iz sredine niza
  • Len: koristi se za pronalaลพenje duljine niza
  • InStr: koristi se za pronalaลพenje poloลพaja podniza u nizu
  • Podrezati: koristi se za uklanjanje razmaka s oba kraja niza
  • zamijeniti: koristi se za zamjenu svake pojave jednog podniza s drugim
  • UCase / LCase: koriste se za pretvaranje niza u velika ili mala slova

Donja tablica prikazuje sintaksu svake funkcije s razraฤ‘enim primjerom, tako da uzorak moลพete izravno kopirati u makro.

funkcija Sintaksa Primjer Izlaz
Lijevo Lijevo(niz, duljina) Lijevo (โ€žsrpanj 2015.โ€œ, 3) srpnja
Desna Desno(niz, duljina) Desno(โ€œsrpanj 2015.โ€, 4) 2015
Srednji Sredina(niz, poฤetak, duljina) Sredina(โ€œsrpanj-2015โ€, 5, 4) 2015
Len Len(niz) Len (โ€žsrpanj 2015.โ€œ) 8
InStr InStr(poฤetak, niz, podniz) InStr(1, โ€œJul-2015โ€, โ€œ-โ€œ) 4
Podrezati Trim(niz) Obrezivanje(" Guru99โ€œ) Guru99
zamijeniti Zamijeni(niz, pronaฤ‘i, zamijeni) Zamijeni (โ€œsrpanj-2015โ€, โ€œ-โ€, โ€œ/โ€) Srpnja / 2015
UCase UCase(niz) UCase(โ€œguru99โ€) GURU99

Makro u nastavku kombinira nekoliko ovih funkcija kako bi ponovno izgradio oznaku datuma od njezinih dijelova.

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

Pokretanje makronaredbe prikazuje srpanj 2015. Svaka funkcija vraฤ‡a novu vrijednost i ostavlja izvorni niz netaknutim, zbog ฤega se rezultati mogu sigurno kombinirati u jednom izrazu.

Sve ove funkcije rade s jednim nizom znakova istovremeno. Kada jedna vrijednost sadrลพi cijelu listu, dvije druge funkcije to bolje obraฤ‘uju.

Kako razdvojiti i spojiti nizove znakova u VBA-i

Podaci zalijepljeni u Excel ฤesto dolaze kao jedna duga vrijednost s razdjelnikom izmeฤ‘u svake stavke, kao ลกto je โ€žPepsi, Coca-Cola, Fanta, Sokโ€œ. ฤŒitanje toga s Mid i InStr je sporo i osjetljivo. VBA pruลพa odgovarajuฤ‡i par funkcija upravo za taj posao.

Split uzima razgraniฤeni niz i vraฤ‡a niz baziran na nuli, s jednim elementom po stavci. Pridruลพite se radi obrnuto, uzima niz i vraฤ‡a jedan niz s razdjelnikom izmeฤ‘u elemenata. Imajte na umu da Join radi na nizu, a ne na dva odvojena niza.

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

Petlja zapisuje svako piฤ‡e u zaseban redak radnog lista, a okvir s porukom zatim prikazuje Pepsi | Coca-Cola | Fanta | Sok. Tri toฤke ฤine ovaj uzorak pouzdanim u produkcijskom kodu:

  • Rezultat zasnovan na nuli: Split uvijek vraฤ‡a niz numeriran od 0, bez obzira na vrijednost postavljenu na Option Base, stoga petlju pokreni s LBound i UBound umjesto fiksnog broja.
  • Deklariraj kao String(): Rezultat dodijelite dinamiฤkom nizu stringova. Deklarisanje fiksne veliฤine prvo uzrokuje greลกku pri kompajliranju.
  • Prazan unos: Razdvajanje praznog niza vraฤ‡a niz bez elemenata, stoga testirajte s UBoundom prije ฤitanja Items(0).

ฤŒak i s ispravno odabranom funkcijom, string kod ne uspijeva na nekoliko predvidljivih naฤina.

Uobiฤajene VBA pogreลกke u nizovima znakova i kako ih ispraviti

Veฤ‡ina greลกaka u nizovima znakova u Excel VBA dolazi iz kratkog popisa uzroka. Prepoznavanje simptoma ลกtedi dugu sesiju otklanjanja pogreลกaka.

  • Neslaganje tipova prilikom spajanja: Izmeฤ‘u teksta i broja koriลกten je znak plus. Zamijenite ga znakom &, koji automatski pretvara broj.
  • InStr vraฤ‡a 0: Podniz nije pronaฤ‘en. InStr vraฤ‡a 0 umjesto -1 u sluฤaju neuspjeha, stoga provjerite vrijednost veฤ‡u od nule prije nego ลกto rezultat proslijedite Mid-u.
  • Nevaลพeฤ‡i poziv procedure u sredini ili lijevo: Traลพena duljina je negativna ili je poฤetna pozicija ispod 1. Zaลกtitite poziv s Len tako da duljina nikada ne prelazi niz.
  • Usporedbe koje bi se trebale podudarati, ali se ne podudaraju: Razmaci na kraju uvezenih podataka prekidaju jednakost. Obje strane se prelome u Trim i koristi StrComp kada se velika i mala slova trebaju zanemariti.
  • Tekst koji neฤ‡e postati broj: Vrijednost poput "1,200" ne uspijeva u aritmetici zbog separatora. Uklonite je s naredbom Replace prije pretvorbe s CLng.

Preuzmite Excel koji sadrลพi gornji kod

Preuzmite gornji Excel Code

Pitanja i odgovori

Niz znakova promjenjive duljine moลพe sadrลพavati do otprilike dvije milijarde znakova, a niz znakova fiksne duljine do 65 400. Meฤ‘utim, ฤ‡elija radnog lista pohranjuje samo 32 767 znakova, pa se dulje vrijednosti skraฤ‡uju prilikom zapisivanja na list.

Znak jednakosti ih prema zadanim postavkama usporeฤ‘uje osjetljivo na velika i mala slova. Za rezultat koji nije osjetljiv na velika i mala slova koristite StrComp(a, b, vbTextCompare) ili postavite Option Compare Text na vrh modula da biste promijenili zadanu vrijednost za cijeli modul.

Znak & pretvara svaki operand u tekst prije spajanja, pa 10 i 5 vraฤ‡a niz 105. Vrijednosti neka budu numeriฤke i prvo ih zbrojite, a zatim spojite rezultat ako se treba pojaviti unutar poruke.

Da. Opiลกite ulaz i ลพeljeni izlaz, na primjer npr.tracUpiลกite kod prije prve crtice, a AI asistent vraฤ‡a izraz Left i InStr. Testirajte ga u odnosu na rubne sluฤajeve kao ลกto je nedostajuฤ‡a crtica.

Da. Zalijepite ugnijeลพฤ‘eni izraz kao ลกto je Mid s InStr unutar njega i AI asistent ga razbija u korake, imenuje svaki argument i oznaฤava sluฤaj u kojem InStr vraฤ‡a nulu i poziv ne uspijeva.

Saลพmite ovu objavu uz: