Cuprins
În timp ce lucrăm cu codurile Excel VBA, întâlnim câteva funcții încorporate care convertesc o sarcină complexă într-un mic cod de un singur rând. InStr este o astfel de funcție disponibilă în Excel VBA care caută un anumit șir de caractere în cadrul altui șir dat, pornind de la o anumită poziție. Astăzi vă voi arăta cum puteți utiliza funcția InStr în VBA pentru a căuta un anumit șir de caractere în cadrul unui alt șir de caractere dat.
Descărcați caietul de practică
Funcția InStr.xlsm
Introducere în Funcția VBA InStr
- Rezumat
Caută un anumit șir de caractere în cadrul unui șir dat, începând de la o anumită poziție. Dacă găsește o potrivire, returnează poziția din șirul dat de la care a început potrivirea.
- Sintaxa
InStr([start],string1,string2,[compare])
- Argumente
ARGUMENT | CERERE | DESCRIERE |
---|---|---|
[start] | Opțional | Poziția de la care va începe căutarea. Valoarea implicită este 1. |
string1 | Necesar | Șirul în care se caută un anumit șir de caractere. |
șir2 | Necesar | Șirul de caractere pe care îl caută într-un șir dat. |
[compara] | Opțional | O valoare numerică între {-1,0,1,2} care specifică tipul de comparație. Valoarea implicită este -1 (vbUseCompareOption). Dacă nu este specificată instrucțiunea Option Compare, se efectuează o comparație binară. |
Notă:
- Cu toate că [start] și argumentul [compara] sunt opționale, aveți nevoie de argumentul [start] dacă se specifică opțiunea [compara] În caz contrar, se va genera o eroare.
- În cazul în care unul sau ambele [start] și argumentul [compara] argumentul este Null , veți întâmpina o eroare.
- Cele patru valori specificate în [compara] argument efectuează patru tipuri diferite de comparații, care sunt menționate mai jos:
VALOARE | CONSTANT | DESCRIERE |
---|---|---|
-1 | vbUseCompareOption | Efectuează comparația specificată în instrucțiunea Option Compare. |
0 | vbBBinaryCompare | Efectuează o comparație binară. |
1 | vbTextCompare | Efectuează o comparație de text. |
2 | vbDatabaseCompare | Efectuează o comparație pe baza bazei de date. |
- Comparați opțiunile este o instrucțiune furnizată înainte de începerea codului VBA principal. Aceasta specifică dacă codul va căuta o comparație binară sau o comparație de text atunci când este necesar.
Opțiunea Comparați textul
- În termeni simpli , Comparație binară înseamnă o comparație care ține cont de majuscule și minuscule.
- În termeni simpli , Comparație de texte înseamnă o comparație care nu ține cont de majuscule și minuscule.
- Valoarea de returnare
- Se returnează poziția din string1 de la care șir2 a început.
- În cazul în care șir2 nu se găsește în cadrul string1 pornind de la start se întoarce 0.
- În cazul în care string1 este de lungime zero, se returnează 0.
- În cazul în care șir2 este de lungime zero, returnează argumentul start .
- Și în cele din urmă, dacă oricare dintre string1 sau șir2 este Null , returnează o eroare.
3 Exemple ușoare de utilizare a funcției VBA InStr
În această secțiune, vom vedea trei exemple simple de aplicare a VBA InStr în Excel. Să vedem primul exemplu de funcție InStr în codurile VBA.
1. Decideți dacă o adresă este sau nu o adresă de e-mail prin utilizarea funcției VBA InStr
În acest caz, am luat un set de date care conține câteva adrese de contact ale clienților. Scopul nostru va fi să identificăm dacă adresele sunt sau nu adrese de e-mail.
Acum vom dezvolta un cod VBA folosind InStr pentru a identifica dacă este sau nu o adresă de e-mail. Pentru a face acest lucru, urmați pașii de mai jos.
Pași:
- La început, mergeți la Dezvoltator și selectați Visual Basic ( Sau apăsați Alt+F11) pentru a deschide fereastra VBA fereastră.
- Apoi, pe VBA mergeți la Inserare> Modul .
- După aceea, pe modul, lipiți următorul cod:
Function DECISION(string1 As String) Dim Position As Integer Position = InStr(1, string1, "@", 0) If Position = 0 Then DECISION = "Not Email" Else DECISION = "Email" End If End Function End Function
- În plus, am creat o funcție numită DECIZIE Aceasta decide dacă o adresă este sau nu o adresă de e-mail. Să aplicăm funcția la setul de date pe care îl avem.
- Pe celulă C5 , scrieți următoarea formulă și apoi completați automat restul celulelor folosind Mâner de umplere .
=DECISION(B5)
- După cum putem vedea, am identificat fiecare adresă, indiferent dacă este sau nu o adresă de e-mail.
🎓 Cum funcționează codul?
- Funcția DECISION(string1 As String)
În primul rând, se creează o funcție numită DECIZIE cu un argument de tip șir de caractere numit string1 .
- Dim Poziția ca întreg
Se declară o variabilă întreagă numită Poziția .
- Position = InStr(1, string1, "@", 0)
Acest lucru atribuie valoarea din Poziția ca ieșire a variabilei InStr cu argumentele 1, string1, "@" și 0 Pe scurt, aceasta atribuie poziția în adresa în care există o adresă. "@" .
- If Position = 0 Then DECISION = "Not Email"
Acesta atribuie ieșirea din DECIZIE funcționează ca "Nu e-mail" , în cazul în care Poziția variabila este 0 , asta înseamnă că nu a existat "@" în adresă.
(Reamintim că, dacă nu se găsește niciun șir de caractere în interiorul șirului dat, se va aplica InStr funcția returnează 0 ).
- Else DECISION = "Email"
Acest lucru atribuie ieșirea de la DECIZIE funcționează ca "Email" în cazul în care a existat un "@" în adresă. Astfel, adresele la care se află "@" sunt clasificate ca Email , iar restul sunt clasificate ca "Nu e-mail" .
Lecturi similare
- Cum se utilizează funcția VBA UCASE în Excel (4 exemple)
- Utilizați funcția MsgBox în Excel VBA (Un ghid complet)
- Cum se utilizează funcția VBA SPLIT în Excel (5 exemple)
- Utilizați funcția LCase în VBA în Excel (cu 4 exemple)
- Cum se utilizează funcția Fix în Excel VBA (4 exemple)
2. Utilizarea funcției VBA InStr pentru Extragerea extensiei unor adrese de e-mail
Aici, avem o listă de adrese de e-mail ale unor clienți. De data aceasta, vom extrage extensia adresei de e-mail, cum ar fi dacă au gmail.com sau yahoo.com .
Pentru a face acest lucru, urmați pașii de mai jos.
Pași:
- Pentru început, ca și în cazul metodei anterioare, deschideți un nou fișier VBA și inserați următorul cod în fereastră.
Function EXTENSION(Email As String) Dim Position As Integer Position = InStr(1, Email, "@", 0) EXTENSION = Right(Email, (Len(Email) - Position)) End Function
- În plus, am creat o funcție numită EXTENSIE Extrage extensia oricărei adrese de e-mail.
- În plus, să aplicăm această funcție la setul de date pe care îl avem. În primul rând, introduceți această formulă în celulă C5 și apoi faceți dublu clic pe Mâner de umplere .
=EXTENSION(B5)
- În cele din urmă, putem vedea că am reușit să extragem extensia tuturor e-mailurilor.
🎓 Cum funcționează codul?
- Funcția EXTENSION(Email As String)
Aceasta creează o nouă funcție numită EXTENSIE , cu un argument de tip șir de caractere numit Email .
- Dim Poziția ca întreg
Această parte declară o variabilă întreagă numită Poziția.
- Poziția = InStr(1, Email, "@", 0)
Acest lucru atribuie valoarea din Poziția ca ieșire a variabilei InStr cu argumentele 1, Email, "@" și 0 Pe scurt, acest lucru atribuie poziția în Email în cazul în care există un "@" .
- EXTENSION = Right(Email, (Len(Email) - Position))
Această parte atribuie ieșirea de la EXTENSIE funcționează ca și caracterele de după simbolul "@" Aceasta este extinderea necesară a Email .
3. Extragerea prenumelui sau a numelui de familie dintr-un nume prin utilizarea funcției VBA InStr
În cele din urmă, vom efectua o sarcină complet diferită. De data aceasta avem numele unor angajați ai unei companii și vom încerca să construim o funcție care să extragă fie numele, fie prenumele angajaților.
Pentru a face acest lucru, urmați pașii de mai jos.
Pași:
- În primul rând, similar cu metoda 1 , inserați codul de mai jos într-un nou modul din fereastra VBA.
Function SHORTNAME(Name As String, First_or_Last As Integer) Dim Break As Integer Break = InStr(1, Name, " ", 0) If First_or_Last = -1 Then SHORTNAME = Left(Name, Break - 1) Else SHORTNAME = Right(Name, Len(Name) - Break) End If End Function
- Aici, am creat o funcție numită NUME SCURT care extrage fie prenumele, fie numele de familie dintr-un nume. Să aplicăm această formulă la setul nostru de date.
- La început, pentru a extrage primul nume, scrieți formula de mai jos în celula C5 .
=SHORTNAME(B5,-1)
- În cele din urmă, pentru a extrage numele de familie, scriem următoarea formulă în D5 :
=SHORTNAME(B5,1)
- Ulterior, dacă autocompletăm restul celulelor cu Manipulator de umplere , vom vedea rezultatul dorit.
🎓 Cum funcționează codul?
- Funcția SHORTNAME(Name As String, First_or_Last As Integer)
Se creează o nouă funcție numită NUME SCURT cu un argument String numit Nume și un Argument întreg numit Primul_sau_Ultimul .
- Dim Break ca număr întreg
Această porțiune declară o nouă variabilă întreagă numită Pauză .
- Break = InStr(1, Name, " ", 0)
Se atribuie valoarea din Pauză ca ieșire a variabilei InStr cu argumentele 1, Nume, " " și 0 Pe scurt, acest lucru atribuie poziția în Nume în cazul în care există un spațiu (" ").
- If First_or_Last = -1 Then SHORTNAME = Left(Name, Break - 1)
Această linie atribuie ieșirea de la NUME SCURT ca și caracterele de dinaintea literei spațiu , în cazul în care Primul_sau_Ultimul este -1. Acesta este primul nume.
- SHORTNAME = Right(Name, Len(Name) - Break)
Această parte atribuie ieșirea de la NUME SCURT funcționează ca și caracterele de după spațiu , în cazul în care Primul_sau_Ultimul argumentul este 1. Acesta este numele de familie.
Concluzie
În acest fel, puteți scrie coduri VBA cu ajutorul aplicației InStr care găsește poziția unui anumit șir de caractere în cadrul altui șir dat, iar apoi puteți crea propriile funcții pentru o varietate de utilizări. În plus, dacă aveți întrebări, nu ezitați să ne întrebați.