Funcția Excel VBA InStr - explicată cu exemple

Ieri, am primit un e-mail de la unul dintre cititorii mei - iunie.

Ea a vrut să știe cum să aplice un format de caractere aldine unei anumite părți a unui șir dintr-o celulă. De exemplu, aplicați formatul aldin doar cuvântului „Bună ziua” din „Bună ziua lumii”.

Și a vrut să facă asta pentru sute de celule simultan.

Deoarece nu există nicio funcționalitate încorporată în Excel care să poată face acest lucru, am creat o macro simplă care utilizează Funcția Excel VBA InStr (veți vedea cum să faceți acest lucru în Exemplul 4 din acest tutorial).

Dar mai întâi, să vedem cum funcționează funcția Excel VBA InStr!

Funcția Excel VBA InStr

În acest tutorial, voi explica utilizarea funcției InStr în Excel VBA și voi vedea câteva exemple practice în care poate fi utilizată.

Funcția Excel VBA InStr - Introducere

Funcția InStr găsește poziția unui șir specificat în cadrul șirului și returnează prima poziție a apariției sale.

De exemplu, dacă doriți să găsiți poziția „x” în „Excel”, folosind funcția Excel VBA InStr s-ar întoarce 2.

Sintaxa funcției InStr

InStr ([Start], String1, String2, [Compare])
  • [Start] - (argument opțional) aceasta este o valoare întreagă care indică funcției InStr poziția de pornire din care ar trebui să înceapă să caute. De exemplu, dacă vreau căutarea să înceapă de la început, voi introduce valoarea 1. Dacă vreau să înceapă cu al treilea caracter în continuare, voi folosi 3. Dacă este omis, se ia valoarea implicită 1.
  • Șirul 1 - Acesta este șirul principal (sau șirul părinte) în care doriți să căutați. De exemplu, dacă căutați poziția lui x în Excel, șirul 1 ar fi „Excel”.
  • Șirul 2 - Acesta este șirul pe care îl căutați. De exemplu, dacă căutați poziția lui x în Excel, String2 ar fi x.
  • [Comparaţie] - (argument opțional) Puteți specifica una dintre următoarele trei valori pentru argumentul [compara]:
    • vbBinaryCompare - Aceasta ar face o comparație caracter cu caracter. De exemplu, dacă căutați „x” în „Excel”, acesta va reveni la 2, dar dacă căutați „X” în „Excel”, acesta va întoarce 0, deoarece X este cu majuscule. De asemenea, puteți utiliza 0 în loc de vbBinaryCompare. Dacă argumentul [Comparare] este omis, acesta este considerat implicit.
    • vbTextCompare - Aceasta ar face o comparație textuală. De exemplu, dacă căutați „x” sau „X” în Excel, acesta va întoarce 2 în ambele cazuri. Acest argument ignoră litera. De asemenea, puteți utiliza 1 în loc de vbTextCompare.
    • vbDatabaseCompare - Acesta este utilizat numai pentru Microsoft Access. Folosește informațiile din baza de date pentru a efectua comparația. De asemenea, puteți utiliza 2 în loc de vbDatabaseCompare.

Note suplimentare despre funcția Excel VBA InStr:

  • InStr este o funcție VBA și nu o funcție de foaie de lucru. Acest lucru înseamnă că nu îl puteți utiliza în foaia de lucru.
  • Dacă String2 (care este sub șirul a cărui poziție o căutați) este gol, funcția va returna valoarea argumentului [Start].
  • Dacă funcția InStr nu poate găsi sub șirul în șirul principal, acesta va returna 0.

Acum să aruncăm o privire la un exemplu de utilizare a funcției Excel VBA InStr

Exemplul 1 - Găsirea poziției de la început

În acest exemplu, voi folosi funcția InStr pentru a găsi poziția lui ‘V’ în ‘Excel VBA’ de la început.

Codul pentru aceasta ar fi:

Sub FindFromBeginning () Dim Position as Integer Position = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End Sub

Când rulați acest cod, acesta va afișa o casetă de mesaj cu valoarea 7, care este poziția „V” în șirul „Excel VBA”.

Exemplul 2 - Găsirea poziției de la începutul celui de-al doilea cuvânt

Să presupunem că vreau să găsesc poziția „the” în propoziție - „Vulpea brună și rapidă sare peste câinele leneș”

Cu toate acestea, vreau ca începutul căutării să înceapă cu al doilea cuvânt.

În acest caz, trebuie să schimbăm argumentul [Start] pentru a ne asigura că specifică poziția de unde începe al doilea cuvânt.

Iată codul care va face acest lucru:

Sub FindFromSecondWord () Poziția dim ca poziția întregii = InStr (4, "Vulpea brună rapidă sare peste câinele leneș", "the", vbBinaryCompare) MsgBox Position End Sub

Acest cod va afișa caseta de mesaj cu valoarea 32, deoarece am specificat poziția de pornire ca 4. Prin urmare, ignoră primul „The” și găsește al doilea „the” în propoziție.

Dacă doriți să îl faceți mai dinamic, puteți îmbunătăți codul astfel încât să ignore automat primul cuvânt.

Iată codul îmbunătățit care va face acest lucru:

Sub FindFromSecondWord () Dim BeginPosition As Integer Dim Position As Integer StartingPosition = InStr (1, "Vulpea brună rapidă sare peste câinele leneș", "", vbBinaryCompare) Position = InStr (StartingPosition, "Vulpea maro rapidă sare peste leneșul dog "," the ", vbBinaryCompare) MsgBox Position End Sub

Acest cod găsește mai întâi poziția unui caracter spațial și îl stochează în variabila StartingPosition.

Apoi folosește această variabilă ca poziție de pornire pentru a căuta cuvântul „the”.

Prin urmare, returnează 32 (care este poziția inițială a „the” după primul cuvânt).

Exemplul 3 - Găsirea poziției @ în adresa de e-mail

Puteți crea cu ușurință o funcție personalizată pentru a găsi poziția @ într-o adresă de e-mail utilizând funcția Excel VBA InStr.

Iată codul pentru a crea funcția personalizată:

Funcția FindPosition (Ref As Range) Ca întreg Poziție interioară Ca poziție întreagă = InStr (1, Ref, "@") FindPosition = Poziție Funcție de sfârșit

Acum puteți utiliza această funcție personalizată ca orice altă funcție de foaie de lucru. Va lua o referință de celulă ca intrare și vă va oferi poziția @ în ea.

În mod similar, puteți crea o funcție personalizată pentru a găsi poziția oricărui șir din cadrul șirului principal.

Exemplul 4 - Evidențierea unei părți din șir în celule

Aceasta este interogarea adresată de June (cititorul meu care m-a inspirat și eu să scriu acest tutorial).

Iată un exemplu de date în formatul pe care mi l-a trimis iunie:

Interogarea ei a fost să facă numerele în afara parantezei îndrăznețe.

Iată codul pe care l-am creat, care face acest lucru:

Sub Bold () Dim rCell As Range Dim Char As Inger pentru fiecare rCell din selecție CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1) .Font.Bold = True Next rCell End Sub

Codul de mai sus folosește bucla Pentru fiecare pentru a parcurge fiecare dintre celulele din selecție. Identifică poziția caracterului de paranteză de deschidere utilizând funcția InStr. Apoi schimbă fontul textului din fața parantezei.

Pentru a utiliza acest cod, trebuie să copiați și să lipiți un modul din editorul VB.

După ce ați copiat lipit codul, selectați celulele în care doriți să efectuați această formatare și rulați macro-ul (așa cum se arată mai jos).

Vă pot plăcea, de asemenea, următoarele tutoriale Excel VBA:

  • Funcția Excel VBA SPLIT.
  • Funcția VBA TRIM.
  • Ghidul final pentru buclele Excel VBA.
  • Un ghid pentru începători pentru utilizarea următoarei bucle în Excel VBA.
  • Cum să creați și să utilizați un program de completare Excel.
  • Cum se combină mai multe cărți de lucru într-un singur registru de lucru Excel.
  • Cum se numără celulele colorate în Excel.
  • Exemple utile de macro VBA Excel pentru începători.
  • Cum să sortați datele în Excel folosind VBA (Un ghid pas cu pas)

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave