INSTR İşlevi
VBA Instr İşlevi, başka bir metin dizesinde bir metin dizesinin bulunup bulunmadığını kontrol eder. Metin bulunamazsa 0 döndürür. Aksi takdirde, metnin bulunduğu karakter konumunu döndürür.
Instr İşlevi şunları gerçekleştirir: bire bir aynı maçlar. VBA Like Operator, Wildcard'ları kullanarak tam olmayan eşleşmeler / desen eşleştirmesi yapmak için bunun yerine kullanılabilir.
Örn.
Aşağıdaki kod parçacığı, "Bu dizeye bak" dizesinde "Bak" sözcüğünü arar. Metin ilk konumda bulunduğu için Instr İşlevi 1 değerini döndürür.
123 | Alt FindSomeText()MsgBox InStr("Bu diziye bak", "Bak")Alt Bitiş |
Bu ikinci örnek, metin 7. konumdan başlayarak bulunduğu için 7 değerini döndürür:
123 | Alt FindSomeText2()MsgBox InStr("Bu diziye bakma", "Bak")Alt Bitiş |
Önemli! Instr İşlevi harfe duyarlı varsayılan olarak. Bu, "bak"ın "Bak" ile eşleşmeyeceği anlamına gelir. Testi büyük/küçük harfe duyarsız hale getirmek için aşağıda okuyun.
Instr Sözdizimi
Instr işlevinin sözdizimi aşağıdaki gibidir:
1 | Instr( [başlangıç], dize, alt dize, [karşılaştır]) |
[başlangıç] (isteğe bağlı) - Bu isteğe bağlı argüman, aramanın başlangıç konumudur. 1. konumdan aramaya başlamak için 1 girin (veya boş bırakın). 5 konumundan aramaya başlamak için 5 girin. Önemli! INSTR işlevi, 1'den sayarak karakter konumunu hesaplar. [başlangıç] konumundan DEĞİL.
sicim - Aranacak metin dizisi.
alt dize - Birincil dizede bulunacak metin dizesi.
[karşılaştır] (isteğe bağlı) - Varsayılan olarak Instr, büyük/küçük harfe duyarlıdır. Bu argümanı ayarlayarak Instr Case'i duyarsız hale getirebilirsiniz:
Argüman vb Değer | bağımsız değişken tamsayı | Açıklama |
vbBinaryCompare |
0 | (Varsayılan) Büyük/küçük harfe duyarlı |
vbTextCompare |
1 | Büyük küçük harf duyarlı değil |
vbDatabaseKarşılaştır |
2 | Yalnızca MS Erişimi. Karşılaştırma yapmak için veritabanındaki bilgileri kullanır. |
Instr Başlangıç Konumu
Instr başlangıç konumu, aramaya başlayacağınız karakter konumunu belirtmenize olanak tanır. Ancak, Instr çıktısının her zaman 1'den sayılacağını unutmayın.
Burada ilk B'yi atlamak için başlangıç konumunu 3'e ayarladık:
123 | Alt Instr_StartPosition()MsgBox InStr(3, "ABC ABC", "B")Alt Bitiş |
Sonuç 6'dır çünkü ikinci B, dizedeki 6. karakterdir.
Büyük/küçük harfe duyarsız INSTR Testi
Varsayılan olarak VBA, “L”ye “l”den farklı davranır. Başka bir deyişle, VBA büyük/küçük harfe duyarlıdır. Bu, tüm metin işlevleri için geçerlidir. VBA'yı büyük/küçük harfe duyarlı hale getirmek için [karşılaştır] bağımsız değişkenini 1 veya vbTextCompare olarak ayarlayın.
123 | Genel Alt FindText_IgnoreCase()MsgBox InStr(1, "Bu dizeye bakma", "bak", vbTextCompare)Alt Bitiş |
Alternatif olarak, kod modülünüzün üstüne Seçenek Karşılaştırma Metni ekleyebilirsiniz:
1 | Seçenek Metni Karşılaştır |
12345 | Seçenek Metni KarşılaştırGenel Alt FindText_IgnoreCase2()MsgBox InStr("Bu diziye bakma", "bak")Alt Bitiş |
Metni Karşılaştır seçeneği, o modüldeki tüm kodu etkiler. Bunu metinle ilgilenen herhangi bir modülün en üstüne koyuyorum çünkü büyük/küçük harf farklarını asla umursamıyorum.
InstrRev İşlevi
Instr İşlevi soldan arama yapar. Bunun yerine InstrRev İşlevini kullanarak sağdan arama yapabilirsiniz. InstrRev İşlevi, Instr işlevine çok benzer şekilde çalışır.
123 | Alt FindSomeText_FromRight()MsgBox InStrRev("Bu diziye bak", "Bak")Alt Bitiş |
Tıpkı Instr işlevi gibi bu da 1 değerini döndürür, çünkü metinde yalnızca bir "Bak" örneği vardır. Ancak ikinci bir "Bak" eklersek, en sağdaki "Bak" konumunu döndürdüğünü göreceksiniz:
123 | Alt FindSomeText_FromRight()MsgBox InStrRev("Bu diziye bak Bak", "Bak")Alt Bitiş |
Şimdi daha fazla Instr örneğini inceleyeceğiz.
Dize İçi Örnekler
Dize Alt Dize İçeriyorsa
Burada, bir dizenin bir metin alt dizesi içerip içermediğini test etmek için bir If ifadesi kullanacağız:
123456789 | Genel Alt FindSomeText()InStr("Bu dizeye bak", "bak") = 0 iseMsgBox "Eşleşme yok"BaşkaMsgBox "En az bir eşleşme"BitirAlt Bitiş |
Hücredeki Metin Dizesini Bul
Bir hücrede bir dize de bulabilirsiniz:
12345 | Alt Find_String_Cell()If InStr(Range("B2").Value, "Dr.") > 0 O zamanAralık("C2").Value = "Doktor"BitirAlt Bitiş |
Veya hücrelerin metin içerip içermediğini test etmek için bir dizi hücre arasında dolaşın:
12345678910 | Alt Search_Range_For_Text()Aralık olarak hücreyi karartAralıktaki Her Hücre İçin("b2:b6")InStr(cell.Value, "Dr.") > 0 isecell.Offset(0, 1).Value = "Doktor"BitirSonraki hücreAlt Bitiş |
Bir Dizedeki Bir Karakterin Konumunu Bul
Bu kod, bir dizedeki tek bir karakterin konumunu bulur ve konumu bir değişkene atar:
1234 | Alt Find_Char()Dim n Uzunn = InStr("Buraya Bakın", "L")Alt Bitiş |
Word için Arama Dizesi
Bu kod, bir kelime için bir dize arayacaktır:
12345678910 | Alt Search_String_For_Word()Dim n Uzunn = InStr("Buraya Bak", "Bak")n = 0 iseMsgBox "Kelime bulunamadı"BaşkaMsgBox "Kelime konumunda bulundu: " & nBitirAlt Bitiş |
Değişken Dize İçeriyorsa
Bu kod, bir dize değişkeninin bir metin dizesi içerip içermediğini test eder:
12345678 | Alt Değişken_Contains_String()Dim str As Stringstr = "Buraya Bakın"InStr(str, "Burada") > 0 iseMsgBox "İşte bulundu!"BitirAlt Bitiş |
Instr ve Sol İşlev
Instr, metni kırpmak için Sol, Sağ, Uzun Boy ve Orta gibi diğer metin işlevleriyle birlikte kullanılabilir.
Sol işleviyle, bir metin dizesinden önce metnin çıktısını alabilirsiniz:
1234567891011 | Alt Instr_Left()Dim str As StringDim n Uzunstr = "Buraya Bak"n = InStr(str, "Burada")MsgBox Sol(str, n - 1)Alt Bitiş |
Microsoft Access VBA'da Instr'yi Kullanma
Yukarıdaki örneklerin tümü, Access VBA'da Excel VBA'dakiyle tamamen aynı şekilde çalışır.
Daha fazla bilgi edinmek için makalemizi okuyun: VBA metin işlevleri