Cum să găsiți un șir de caractere cu VBA în Excel (8 exemple)

  • Imparte Asta
Hugh West

Implementarea VBA este cea mai eficientă, mai rapidă și mai sigură metodă de a executa orice operație în Excel. În acest articol, vă vom arăta cum să găsiți anumite șiruri de caractere într-un alt șir dat folosind VBA în Excel.

Descărcați modelul de practică

Puteți descărca gratuit modelul Excel de practică de aici.

VBA pentru a găsi în String.xlsm

Funcția InStr

Microsoft Excel are o funcție încorporată numită funcția InStr pentru a găsi poziția anumitor șiruri de caractere într-un anumit String.

Sintaxa generică:

InStr([start], string1, string2, [compare])

Aici,

Argumente Necesar/ Opțional Definiție
start Opțional Poziția de pornire a căutării.
  • În mod prestabilit, se utilizează InStr calculează poziția caracterului prin numărarea de la 1, nu de la poziția de început. Prin urmare, puteți lăsa acest câmp gol dacă doriți.
string1 Necesar Șirul în care se caută, șir primar.
șir2 Necesar Șirul care trebuie căutat în șirul primar.
comparați Opțional The InStr este sensibilă la majuscule și minuscule în mod implicit. Dar dacă doriți să rulați o funcție care nu ține cont de majuscule și minuscule InStr , atunci puteți trece argumentul aici pentru a efectua o anumită comparație. Acest argument poate avea următoarele valori,
  • vbBBinaryCompare -> efectuează o comparație binară, valoare de retur 0
  • vbTextCompare -> efectuează o comparație de text, valoare de retur 1
  • vbDatabaseCompare -> efectuează o comparație a bazei de date, valoare de retur 2

În mod implicit, InStr ia vbBBinaryCompare ca argument de comparație.

8 Exemple ușoare pentru a găsi poziția specifică a unui șir de caractere în șirul dat utilizând VBA

Să vedem câteva exemple simple pentru a obține pozițiile anumitor șiruri de caractere într-un șir dat folosind VBA .

1. VBA pentru a găsi poziția textului în șir de caractere

Mai jos este un exemplu de InStr pentru a găsi poziția unui text într-un șir de caractere.

  • Presa Alt + F11 de pe tastatură sau mergeți la fila Dezvoltator -> Visual Basic pentru a deschide Editor Visual Basic .

  • În fereastra de cod pop-up, din bara de meniu, faceți clic pe Inserare -> Modul .

  • Acum, în fereastra de cod, scrieți un simplu InStr în interiorul unui program Subprocedură VBA (a se vedea mai jos).
 Sub INSTR_Exemplu() MsgBox InStr("Happiness is a choice", "choice") End Sub 

Codul dumneavoastră este acum gata de a fi executat.

  • Apăsați F5 de pe tastatură sau, din bara de meniu, selectați Run -> Run Sub/UserForm Puteți, de asemenea, să faceți clic pe pictograma mică de redare din bara de submeni pentru a rula macrocomenzul.

Veți vedea că în caseta de mesaje pop-up veți primi un număr care declară poziția din textul pe care doriți să îl verificați.

Explicație:

Șirul nostru principal, " Fericirea este o alegere " este o propoziție de 21 de litere (cu spații) și am vrut să găsim poziția textului " alegere " în acel șir. Textul " alegere " a pornit de la poziția 16 a corzii primare, de unde am obținut numărul 16 ca rezultat în caseta de mesaje.

2. VBA pentru a găsi textul dintr-o anumită poziție într-un șir de caractere

Acum să aflăm ce s-ar întâmpla dacă am dori să obținem poziția de la un anumit număr.

  • În același mod ca și înainte, deschideți Editor Visual Basic de la Dezvoltator fila și Introduceți a Modul în fereastra de cod.
  • În fereastra de cod, scrieți un simplu InStr prezentat mai sus și treceți valoarea în argumentul start în funcție de poziția din care doriți să numărați textul.
 Sub INSTR_Exemplu() MsgBox InStr(17, "Happiness is a choice", "choice") End Sub 

  • Următorul, Rulați codul.

Veți vedea că fereastra de mesaje pop-up vă va oferi un număr care declară poziția a textului pornind de la o anumită poziție pe care ai vrut să le verifici.

Explicație:

Așa cum știam deja (din discuția din faza 1) că textul " alegere " a pornit din poziția de 16 , așa că am introdus două " alegere " în șirul primar și setați 17 ca prim parametru pentru a sări peste primul " alegere ". Deci, noi Rulați macroul de mai sus și ne-a arătat numărul de poziție 27 care este exact numărul de poziție al al doilea " alegere " în șirul dat.

3. VBA pentru a găsi text cu funcția InStr, care nu ține cont de majuscule și minuscule, în String

De la introducerea InStr știți deja că, în mod implicit, funcția InStr este sensibilă la majuscule și minuscule. Să aflăm acest lucru printr-un exemplu.

A se vedea următoarele VBA unde am vrut să găsim poziția cuvântului " Alegerea " cu un "C" majusculă în șirul " Fericirea este o alegere ", unde alegerea este scrisă cu un "c" mic .

  • Rulați codul și găsiți 0 ca rezultat.

Asta pentru că InStr funcția tratează "C" majusculă și "c" mic în mod diferit, așa că a căutat cuvântul " Alegerea " în șirul de caractere și nu a obținut nicio potrivire, așa că a returnat 0 .

  • Pentru a realiza InStr funcția nu ține cont de majuscule și minuscule , setați argumentul de comparare la vbTextCompare (a se vedea mai jos).
 Sub INSTR_Exemplu() MsgBox InStr(1, "Happiness is a choice and choice", "Choice", vbTextCompare) End Sub 

  • Rulați codul.

Veți obține poziția textului din șirul de caractere, indiferent dacă textul este scris în litere majuscule sau litere mici .

4. VBA pentru a găsi textul din dreapta unui șir de caractere

Până în prezent InStr ne dădea doar poziția din partea stângă a șirului de caractere. Dar ce se întâmplă dacă doriți să găsiți poziția textului din partea dreaptă a șirului de caractere.

Funcția InStrRev caută din dreapta. InStrRev funcționează foarte asemănător cu funcția InStr și vă va găsi poziția unui text de pe lista partea dreaptă a șirului.

Pentru a înțelege diferența, consultați următoarele exemple.

  • Dacă rulăm următorul cod cu InStr funcția atunci,

ne oferă poziția ( 16 ) a primului text " alegere ".

  • Dar dacă rulăm același cod cu InStrRev Funcția atunci,

ne oferă poziția ( 27 ) a ultimului text " alegere ".

Lecturi similare:

  • FindNext utilizând VBA în Excel (2 exemple)
  • Cum să găsiți și să înlocuiți folosind VBA (11 moduri)
  • Găsiți corespondența exactă utilizând VBA în Excel (5 moduri)

5. VBA pentru a găsi poziția unui caracter în șirul de caractere

De asemenea, puteți găsi poziția unui anumit caracter într-un șir de caractere în același mod în care ați găsit textul.

  • Copiați următorul cod în fișierul dvs. VBA fereastra de cod
 Sub Find_Character() Dim z As Long z = InStr("Happiness is a choice", "e") MsgBox z End Sub 

  • Și Rulați macro.

Primul " e " din șirul nostru dat se află la numărul 7 poziție.

6. VBA pentru a găsi subșiruri într-un șir de caractere

Aici vom învăța cum să aflăm dacă un șir de caractere conține un substring sau nu.

Pentru a obține acest lucru, trebuie să rulăm un Declarație IF în codul nostru.

  • În același mod ca și înainte, deschideți Editor Visual Basic de la Dezvoltator fila și Introduceți a Modul în fereastra de cod.
  • În fereastra de cod, copiați următorul cod și lipiți-l.
 Public Sub FindSub() If InStr("Happiness is a choice", "choice") = 0 Then MsgBox "No match found" Else MsgBox "Match found" End If End Sub 

Codul dumneavoastră este acum gata de a fi executat.

  • Rulați macro.

În cazul în care șirul conține subșirul atunci veți obține un meci găsit , în caz contrar, va returna nicio potrivire găsită. În exemplul nostru, am vrut să aflăm dacă șirul nostru primar " Fericirea este o alegere " conține cuvântul " alegere "În acest caz, vom obține un mesaj Potrivire găsită rezultat.

7. VBA pentru a găsi un șir de caractere într-o gamă de celule

Puteți căuta un anumit text într-un interval de celule de șir de caractere și să returnați un anumit șir.

Priviți exemplul următor unde vom găsi " Dr. ", iar atunci când există o potrivire va returna " Doctor ".

  • Mai jos este codul pentru a obține rezultatul discutat mai sus,
 Sub Find_String_in_Range() Dim cell As Range For Each cell In Range("B5:B10") If InStr(cell.Value, "Dr.")> 0 Then cell.Offset(0, 1).Value = "Doctor" End If Next cell End Sub 

  • Rulați codul și rezultatul este prezentat mai jos

  • Puteți modifica macroul în funcție de nevoile dumneavoastră. De exemplu, dacă doriți să găsiți " Prof. " în orice celulă a șirului, și obțineți " Profesor " ca și retur, atunci pur și simplu treceți " Prof. " ca valoare în loc de " Dr. ." în al patrulea rând al macroului și " Profesor " în loc de " Doctor " în a 5-a linie a macroului și definiți numărul intervalului de celule în mod corespunzător.

8. VBA pentru a găsi un șir de caractere într-o celulă

De asemenea, puteți căutarea unui anumit text într-o singură celulă a șirului de caractere și returnează un anumit șir de caractere.

  • Copiați următorul cod și lipiți-l în fereastra de cod.
 Sub Find_String_in_Cell() If InStr(Range("B5").Value, "Dr.")> 0 Then Range("C5").Value = "Doctor" End If End Sub 

Acesta va căuta " Dr. " în Celula B5 și dacă găsește o potrivire, atunci returnează " Doctor " în Celula C5 .

  • Puteți modifica macroul în funcție de nevoile dumneavoastră. De exemplu, dacă doriți să găsiți " Prof. " în orice celulă a șirului, și obțineți " Profesor " ca și retur, atunci pur și simplu treceți " Prof. " ca valoare în loc de " Dr. ." în al doilea rând al macroului și " Profesor " în loc de " Doctor " în al treilea rând al macrocomenzii și definiți numărul de referință al celulei în mod corespunzător.

Concluzie

Acest articol v-a arătat cum să găsiți anumite texte în șir în Excel folosind Macro VBA. Sper că acest articol v-a fost foarte benefic. Nu ezitați să îmi adresați orice întrebare referitoare la acest subiect.

Hugh West este un trainer și analist Excel cu o experiență de peste 10 ani în industrie. Deține o diplomă de licență în contabilitate și finanțe și un master în administrarea afacerilor. Hugh are o pasiune pentru predare și a dezvoltat o abordare unică de predare care este ușor de urmărit și de înțeles. Cunoștințele sale experte despre Excel au ajutat mii de studenți și profesioniști din întreaga lume să-și îmbunătățească abilitățile și să exceleze în cariera lor. Prin blogul său, Hugh își împărtășește cunoștințele lumii, oferind tutoriale gratuite Excel și instruire online pentru a ajuta persoanele și companiile să-și atingă întregul potențial.