Excel VBA InStr függvény - példákkal magyarázva

Tartalomjegyzék

Tegnap kaptam egy e -mailt az egyik olvasómtól - June.

Tudni akarta, hogyan kell vastag betűformátumot alkalmazni a karakterlánc egy adott részére a cellán belül. Például alkalmazza a félkövér formátumot csak a „Hello” szónál a „Hello World” szónál.

És ezt egyszerre több száz cellára akarta tenni.

Mivel az Excelben nincs beépített funkció, amely ezt megteheti, létrehoztam egy egyszerű makrót, amely a Excel VBA InStr függvény (ezt az oktatóanyag 4. példájában láthatja).

De először nézzük meg, hogyan működik az Excel VBA InStr funkció!

Excel VBA InStr függvény

Ebben az oktatóanyagban elmagyarázom az InStr függvény használatát az Excel VBA -ban, és néhány gyakorlati példát mutatok be, ahol használható.

Excel VBA InStr függvény - Bevezetés

Az InStr függvény megkeresi a megadott alstringek pozícióját a karakterláncon belül, és visszatér az előfordulás első pozíciójához.

Például, ha szeretné megtalálni az „x” pozíciót az „Excel” -ben, akkor az Excel VBA InStr funkció használatával 2 -t adna vissza.

Az InStr függvény szintaxisa

InStr ([Start], String1, String2, [Összehasonlítás])
  • [Rajt] - (nem kötelező argumentum) ez egy egész szám, amely megmondja az InStr függvénynek a kiindulási pozíciót, ahonnan keresni kell. Például, ha azt akarom, hogy a keresés az elejétől kezdődjön, akkor az értéket 1 -nek adom meg. Ha azt szeretném, hogy a harmadik karakterrel kezdődjön, akkor a 3 -at használom.
  • Karakterlánc1 - Ez a fő karakterlánc (vagy a szülő karakterlánc), amelyben keresni szeretne. Például, ha az x pozícióját keresi az Excelben, az 1. karakterlánc az „Excel” lenne.
  • Karakterlánc2 - Ez az a karakterlánc, amelyet keres. Ha például az x pozícióját keresi az Excelben, akkor a String2 x lesz.
  • [Összehasonlítás] - (nem kötelező argumentum) Az [összehasonlítás] argumentumhoz megadhatja az alábbi három érték egyikét:
    • vbBinaryCompare - Ez karakteres összehasonlítást jelentene. Például, ha az „Excel” -ben az „x” szót keresi, akkor 2 -t ad vissza, de ha az „Excel” -ben az „X” -et keresi, akkor 0 -t ad vissza, mivel az X nagybetű. A vbBinaryCompare helyett 0 -t is használhat. Ha az [Összehasonlítás] argumentum kihagyásra kerül, akkor ez az alapértelmezett.
    • vbTextCompare - Ez szöveges összehasonlítást eredményezne. Ha például az „x” vagy az „X” kifejezést keresi az Excelben, akkor mindkét esetben 2 értéket ad vissza. Ez az érv figyelmen kívül hagyja a betűs esetet. A vbTextCompare helyett 1 -et is használhat.
    • vbDatabaseCompare - Ez csak a Microsoft Accesshez használható. Az adatbázisban található információkat használja az összehasonlítás elvégzéséhez. A vbDatabaseCompare helyett 2 -t is használhat.

További megjegyzések az Excel VBA InStr funkcióhoz:

  • Az InStr egy VBA függvény és nem egy munkalap függvény. Ez azt jelenti, hogy nem használhatja a munkalapon belül.
  • Ha a karakterlánc2 (amely az a karakterlánc, amelynek pozícióját keresi) üres, a függvény a [Start] argumentum értékét adja vissza.
  • Ha az InStr függvény nem találja a fő karakterláncon belüli alláncot, akkor 0 -t ad vissza.

Most nézzünk néhány példát az Excel VBA InStr függvény használatára

1. példa - A pozíció megtalálása az elejétől

Ebben a példában az InStr funkciót használom, hogy megtaláljam a „V” pozíciót az „Excel VBA” elejétől.

Ennek kódja a következő lenne:

Sub FindFromBeginning () Dim Pozíció egész pozícióként = InStr (1, "Excel VBA", "V", vbBinaryCompare) MsgBox Pozíció Végrész

Amikor ezt a kódot futtatja, megjelenik egy üzenetdoboz 7 értékkel, amely a „V” pozíció az „Excel VBA” karakterláncban.

2. példa - A pozíció megtalálása a második szó elejétől

Tegyük fel, hogy meg akarom találni a „the” pozíciót a mondatban - „A gyors barna róka átugrik a lusta kutyán”

Szeretném azonban, ha a keresés a második szóval kezdődne.

Ebben az esetben meg kell változtatnunk a [Start] argumentumot, hogy megbizonyosodjunk arról, hogy a második szó kezdőpontját adja meg.

Itt van a kód, ami ezt teszi:

Sub FindFromSecondWord () Dim Position As Integer Position = InStr (4, "A gyors barna róka átugrik a lusta kutyán", "a", vbBinaryCompare) MsgBox Pozíció Vége Sub

Ez a kód a 32 -es értékű üzenetdobozt fogja megjeleníteni, mivel a kezdő pozíciót 4 -nek adtuk meg. Ezért figyelmen kívül hagyja az első „The” -t, és megtalálja a második „the” -t a mondatban.

Ha dinamikusabbá akarja tenni, javíthatja a kódot úgy, hogy az automatikusan figyelmen kívül hagyja az első szót.

Itt van a továbbfejlesztett kód, amely ezt teszi:

Sub FindFromSecondWord () Dim StartingPosition as Integer Dim Position as Integer StartingPosition = InStr (1, "A gyors barna róka átugrik a lusta kutyán", "", vbBinaryCompare) Position = InStr (StartingPosition, "A gyors barna róka átugorja a lustát" kutya "," a ", vbBinaryCompare) MsgBox Pozíció Vége Sub

Ez a kód először megtalálja a szóköz karakter pozícióját, és eltárolja a StartingPosition változóban.

Ezt a változót használja kiinduló pozícióként az „the” szó kereséséhez.

Ezért 32 -et ad vissza (ami az „első” szó utáni „kiinduló helyzet”).

3. példa - A @ pozíciójának megkeresése az e -mail címben

Az Excel VBA InStr függvénnyel könnyen létrehozhat egyéni függvényt a @ pozíciójának megtalálásához egy e -mail címben.

Íme a kód az egyéni funkció létrehozásához:

Funkció FindPosition (Ref. Mint tartomány) Integer Dim pozícióként Integer Position = InStr (1, Ref, "@") FindPosition = Position End Function

Most ezt az egyéni funkciót bármely más munkalap -funkcióként használhatja. Ez egy cellahivatkozást vesz be bemenetként, és megadja a @ pozícióját.

Hasonlóképpen létrehozhat egy egyéni függvényt, amely megkeresi a fő karakterláncban lévő bármely alstringet.

4. példa - A karakterlánc egy részének kiemelése a cellákban

Ezt a lekérdezést június tette fel (olvasóm, aki inspirált is az oktatóanyag megírására).

Íme egy mintaadat, amelyet június küldött nekem:

Lekérdezése az volt, hogy a zárójelen kívüli számokat félkövérré tegye.

Íme az általam létrehozott kód, amely ezt teszi:

Sub Bold () Dim rCell As Range Dim Char mint Integer Minden egyes kiválasztott rCell CharCount = Len (rCell) Char = InStr (1, rCell, "(") rCell.Characters (1, Char - 1) .Font.Bold = True Next rCell End Sub

A fenti kód a Minden egyes ciklushoz használja a kijelölés minden celláját. Az InStr funkció segítségével azonosítja a nyitó zárójel karakter pozícióját. Ezután megváltoztatja a zárójel előtti szöveg betűtípusát.

Ennek a kódnak a használatához be kell másolnia és be kell illesztenie egy modulba a VB szerkesztőben.

Miután beillesztette a kódot, válassza ki azokat a cellákat, amelyekben ezt a formázást szeretné végrehajtani, és futtassa a makrót (az alábbiak szerint).

A következő Excel VBA oktatóanyagok is tetszhetnek:

  • Excel VBA SPLIT függvény.
  • VBA TRIM funkció.
  • Az Excel VBA hurkok végső útmutatója.
  • Kezdő útmutató a következő hurok használatához Excel VBA -ban.
  • Excel-bővítmény létrehozása és használata.
  • Több munkafüzet egyesítése egyetlen Excel munkafüzetbe.
  • Színes cellák számlálása Excelben.
  • Hasznos Excel VBA makrópéldák kezdőknek.
  • Az adatok rendezése Excelben a VBA használatával (lépésről lépésre)

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave