Funcții de manipulare a șirurilor VBA și Operatori

⚡ Rezumat inteligent

Funcții de manipulare a șirurilor VBA și Operatori combină, măsoară și exprimătracText t în macrocomenzile Excel. Această pagină explică operatorul de concatenare, funcțiile Left, Right, Mid, Len și InStr, divizarea și unirea și erorile care cel mai adesea rup codul șirurilor.

  • 🔤 Date de tip șir de caractere: O valoare construită din caractere, simboluri și numere, cum ar fi textul Iul-2015.
  • Concatenare Operator: Ampersand-ul unește două șiruri de caractere, deci „John” și „Doe” returnează John Doe.
  • ✂️ ExtracFuncții de țiune: Stânga, Dreapta și Mijlocul extrag un subșir de la începutul, sfârșitul sau mijlocul unei valori.
  • 📏 Functii de masurare: Len numără caracterele, iar InStr returnează poziția în care începe un subșir.
  • 🧩 Divizare și alăturare: Split sparge un șir delimitat într-un tablou, iar Join reconstruiește un tablou într-un singur șir.
  • ⚠️ Erori frecvente: Nepotrivirea de tip, returnarea zero de către InStr și spațiile la final cauzează majoritatea comparațiilor eșuate.

Funcții de manipulare a șirurilor VBA și Operatori

șir VBA Operatori

Datele șir sunt folosite pentru a păstra date care sunt alcătuite din numere, caractere și simboluri. „Iul-2015” este un exemplu de date șir. Este alcătuit din

  • Personaje (iul.)
  • Simbol (-)
  • Numbers (2015)

Operatorii șir sunt utilizați pentru a manipula datele șir. De exemplu, puteți concatena valoarea lunii iulie-2015 din primele 3 litere ale lunii și ale anului, cum ar fi „Iul-2015”.

Următorul tabel arată operatorul de șir VBA de concatenare.

S / N OperaTdR Descriere Exemplu producție
1 & Concatenare: Acest operator este folosit pentru a concatena șiruri împreună „Ioan” și „Doe” Anonim

Sursa de exemplu Code

șir VBA OperaExemplu de sursă pentru tori Code

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

Executarea codului de mai sus produce următorul rezultat

șir VBA OperaExemplu de sursă pentru tori Code

Ampersand-ul nu este singurul simbol care pare să unească textul, iar diferența dintre cele două contează odată ce sunt implicate numere.

Diferența dintre & și + pentru concatenarea șirurilor de caractere

VBA acceptă atât semnul ampersand, cât și semnul plus între două valori text, așa că începătorii le tratează adesea ca fiind interschimbabile. Se comportă diferit imediat ce un operand este un număr sau o valoare goală și doar unul dintre ele este sigur.

comportament & (Ampersand) + (Plus)
Două valori textuale Li se alătură: „Guru„Și „99” returnează Guru99 Li se alătură: „Guru„ + „99” returnează Guru99
Text și un număr Convertește numărul în text: „Vârstă” și 30 returnează Vârsta 30 Ridică o eroare de nepotrivire de tip
Două șiruri numerice „10” și „5” returnează 105 „10” + „5” pot aduna și returna 15
O valoare nulă Tratează Null ca un șir gol Returnează Null și elimină întregul rezultat

💡 Sfat: Folosește întotdeauna semnul ampersand pentru concatenare și rezervă semnul plus pentru operatii aritmeticePuneți un spațiu înainte și după caracterul ampersand, deoarece scrierea lui Total& este citită de VBA ca un caracter de declarație de tip Long.

Funcții de manipulare a șirurilor VBA

Manipularea șirurilor VBA este un element important în Excel VBA pentru programare macro și operații cu șiruri. Excel oferă diferite tipuri de funcții de manipulare a șirurilor VBA, cum ar fi:

  • Stânga: este folosit pentru a extract caractere din partea stângă a șirului
  • Dreapta: este folosit pentru a extract caractere din partea dreaptă a șirului
  • La mijlocul: este folosit pentru a extracun subșir din mijlocul unui șir
  • Len: este folosit pentru a afla lungimea unui șir
  • InStr: este folosit pentru a găsi poziția unui subșir într-un șir
  • Tunde: este folosit pentru a elimina spațiile de la ambele capete ale unui șir de caractere
  • Înlocui: este folosit pentru a schimba fiecare apariție a unui subșir cu altul
  • UCase / LCase: sunt folosite pentru a converti un șir de caractere în majuscule sau minuscule

Tabelul de mai jos prezintă sintaxa fiecărei funcții cu un exemplu practic, astfel încât să puteți copia modelul direct într-o macrocomandă.

Funcţie Sintaxă Exemplu producție
Stânga Stânga(șir, lungime) Stânga(„Iul-2015”, 3) iulie
Dreapta Dreapta(șir, lungime) Corect(„Iul-2015”, 4) 2015
La mijlocul Mijloc(șir, început, lungime) Mijlocul („Iulie-2015”, 5, 4) 2015
Len Len(șir) Len („Iulie-2015”) 8
InStr InStr(start, string, substring) InStr(1, „Iul-2015”, „-“) 4
Tunde Decupare (șir) Trim(” Guru99 „) Guru99
Înlocui Înlocuire(șir, găsire, înlocuire) Înlocuiește(„Iul-2015”, „-“, „/”) Iul / 2015
UCase UCase (șir) UCase(„guru99”) GURU99

Macrocomanda de mai jos combină mai multe dintre aceste funcții pentru a reconstrui o etichetă de dată din părțile sale.

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

Rularea macrocomenzii afișează data din iulie 2015. Fiecare funcție returnează o valoare nouă și lasă șirul original neatins, motiv pentru care rezultatele pot fi combinate în siguranță într-o singură expresie.

Toate aceste funcții lucrează pe câte un șir de caractere odată. Când o singură valoare conține o listă întreagă, alte două funcții o gestionează mai bine.

Cum se divizează și se unesc șiruri de caractere în VBA

Datele lipite în Excel ajung adesea ca o singură valoare lungă cu un separator între fiecare element, cum ar fi „Pepsi, Coca-Cola, Fanta, Suc”. Citirea acestora cu Mid și InStr este lentă și fragilă. VBA oferă o pereche de funcții potrivite exact pentru această sarcină.

Despică primește un șir delimitat și returnează un tablou cu bază zero, cu câte un element per element. Alatura-te face invers, luând un array și returnând un singur șir de caractere cu un separator între elemente. Rețineți că funcția Join funcționează pe un array, nu pe două șiruri de caractere separate.

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

Bucla scrie fiecare băutură în propriul rând din foaia de lucru, iar caseta de mesaje afișează apoi Pepsi | Coke | Fanta | Juice. Trei aspecte fac ca acest model să fie fiabil în codul de producție:

  • Rezultat cu bază zero: Split returnează întotdeauna un tablou numerotat de la 0, indiferent de valoarea la care este setată Option Base, deci bucla se folosește LBound și UBound în loc de un număr fix.
  • Declarați ca șir de caractere (): Atribuiți rezultatul unei matrice dinamice de tip String. Declararea mai întâi a unei dimensiuni fixe provoacă o eroare de compilare.
  • Intrare goală: Împărțirea unui șir gol returnează un tablou fără elemente, așadar testați cu UBound înainte de a citi Items(0).

Chiar și cu funcția aleasă corect, codul de tip șir de caractere eșuează într-un număr mic de moduri previzibile.

Erori comune ale șirurilor VBA și cum să le remediați

Majoritatea erorilor de tip șir de caractere din Excel VBA provin dintr-o listă scurtă de cauze. Recunoașterea simptomului economisește o sesiune lungă de depanare.

  • Nepotrivire de tip la concatenare: S-a folosit un semn plus între text și un număr. Înlocuiți-l cu un ampersand, care convertește automat numărul.
  • InStr returnează 0: Subșirul nu a fost găsit. InStr returnează 0 în loc de -1 în caz de eșec, așadar testați pentru o valoare mai mare decât zero înainte de a transmite rezultatul către Mid.
  • Apel de procedură nevalid în Mid sau Left: Lungimea solicitată este negativă sau poziția de început este sub 1. Protejați apelul cu Len astfel încât lungimea să nu depășească niciodată șirul de caractere.
  • Comparații care ar trebui să se potrivească, dar nu se potrivesc: Spațiile finale din datele importate întrerup egalitatea. Încadrați ambele părți în Trim și folosiți StrComp atunci când majusculele/minusculele trebuie ignorate.
  • Text care nu va deveni un număr: O valoare precum „1,200” eșuează la aritmetică din cauza separatorului. Eliminați-o cu Înlocuire înainte de a o converti cu CLng.

Descărcați Excel care conține codul de mai sus

Descărcați fișierul Excel de mai sus Code

Întrebări frecvente

Un șir de caractere cu lungime variabilă poate conține până la aproximativ două miliarde de caractere, iar un șir de caractere cu lungime fixă ​​poate conține până la 65,400. O celulă dintr-o foaie de calcul, însă, stochează doar 32,767 de caractere, așadar valorile mai lungi sunt trunchiate atunci când sunt scrise într-o foaie.

Semnul egal compară datele în mod implicit, ținând cont de majuscule și minuscule. Folosește StrComp(a, b, vbTextCompare) pentru un rezultat care nu ține cont de majuscule și minuscule sau plasează Option Compare Text în partea de sus a modulului pentru a schimba valoarea implicită pentru întregul modul.

Ampersand-ul convertește fiecare operand în text înainte de unire, deci 10 & 5 returnează șirul 105. Păstrați valorile numerice și adunați-le mai întâi, apoi concatenați rezultatul dacă trebuie să apară într-un mesaj.

Da. Descrieți intrarea și ieșirea dorită, de exemplu ex.tracTestează codul dinaintea primei linii de caractere, iar un asistent de inteligență artificială returnează o expresie Left și InStr. Testează-l în funcție de cazuri limită, cum ar fi lipsa unei linii de caractere.

Da. Inserați o expresie imbricată, cum ar fi Mid, cu InStr în interiorul ei, iar un asistent de inteligență artificială o împarte în pași, denumește fiecare argument și semnalează cazul în care InStr returnează zero și apelul eșuează.

Rezumați această postare cu: