VBA InStr, verilen metin değeri içinde istenilen alfabenin veya sayının konumunu bulmamıza yardımcı olan bir metin fonksiyonudur. InStr, VBA Excel'de "In String" anlamına gelir.
Örneğin, 'Wallstreetmojo' metninde 's' alfabesinin yerini bulmak istiyorsak, InStr fonksiyonu 's' metninin yerini 5 olarak döndürecektir.
Bu arada, VBA InStr fonksiyonu, tam dizeden çeşitli konumlara göre alt dizeyi almak için destekleyici bir fonksiyon olarak diğer metin fonksiyonlarıyla birlikte yaygın olarak kullanılır.
Unutmayın, InStr fonksiyonunun çıktısı her zaman tam sayıdır.
ÖNEMLİ NOKTALAR
- VBA InStr fonksiyonu, verilen tam metin içerisinde istenilen metnin konumunu döndürür.
- VBA InStr'nin büyük/küçük harfe duyarlı bir formül olduğunu unutmayın, dolayısıyla büyük ve küçük harf karakter konumlarını arayabiliriz.
- InStr fonksiyonunu kullanarak adı ve soyadını alabiliriz.
- Benzer şekilde InStr fonksiyonunu kullanarak çalışma sayfası adında belirli bir ada sahip çalışma sayfalarını gizleyebiliriz.
VBA InStr Fonksiyonunun Sözdizimi
Herhangi bir fonksiyonu pratik olarak uygulamadan önce sözdizimini anlamak önemlidir. Aşağıda Excel VBA'da InStr fonksiyonunun sözdizimi verilmiştir.
InStr([Start],[String1],[String2],[Compare as VbCompareMethod = vbBinaryCompare]
[Başlat]: Öncelikle, InStr fonksiyonunun verilen metin değerini aramaya hangi konumdan başlayacağını belirtmemiz gerekir. Varsayılan olarak, başlangıç konumu her zaman 1'dir.
Örneğin, 'Excel' kelimesindeki 'e' metnini aramak için [başlangıç] pozisyonunu 3 olarak girersek , InStr fonksiyonu çıktı olarak 4 döndürecektir. Harf 'E'dir ancak başlangıç pozisyonunu 3 olarak verdiğimizden, InStr fonksiyonu verilen metnin 3. karakterinden sonra 'E' harfini aramaya başlayacaktır , bu yüzden sonuç 4 olacaktır.
[Dize 1]: Bu argümanda, alt dizeyi bulmamız gereken metin değerini vermemiz gerekir. Örneğin, 'Excel' [Dize 1]' dir .
[Dize 2]: [Dize 1]' den hangi alt dizenin konumunu bulmaya çalışıyoruz. Yani, 'E' harfi bulmaya çalıştığımız alt dizenin konumudur.
[Karşılaştır]: Bu argümanda, karşılaştırma türünü belirtmemiz gerekir. 3 tür karşılaştırma yöntemi mevcuttur ve bunlar şunlardır:
- vbBinaryKarşılaştırma
- vbVeritabanıKarşılaştırması
- vbTextKarşılaştırma
vbBinaryCompare: Bu, karakterlerin büyük/küçük harfe duyarlı aramasını bulmak için kullanılır. Unutmayın, bu, tam dizedeki (dize 1) bir alt dizenin (dize 2) büyük/küçük harfe duyarlı aramasıdır.
Şimdi vbBinaryCompare olarak 0 girdiğimizde örnek çıktılar aşağıdaki gibidir.
- Eğer ikili arama girişi 0 olan 'Sydney' (Dize 1) dizesindeki 'y' (Dize 2) karakterini bulmak istiyorsak, sonuç 1 olarak döndürülecektir, çünkü 'Sydney' dizesindeki 'y' harfinin konumu 2'dir.
- Benzer şekilde, ikili arama girişi 0 olan 'Sydney' (Dize 1) dizesindeki 'Y' (Dize 2) karakterini bulmak istersek, sonuç 0 olarak döndürülecektir, çünkü 'Y' harfi büyük harftir ve verdiğimiz arama büyük/küçük harfe duyarlıdır ve 1 numaralı 'Sydney' dizesinde büyük harfli 'Y' yoktur.
vbTextCompare: Bu seçenek büyük/küçük harfe duyarlı aramaların göz ardı edilmesi için kullanılabilir. Şimdi, giriş argümanı olarak 1'i geçebiliriz.
vbTextCompare olarak 1 girdiğimizde örnek çıktılar aşağıdaki gibidir.
- 'Sydney' (Dize 1) dizesindeki 'y' veya 'Y' (Dize 2) karakterini, metin arama girişi 1 olarak bulmak istiyorsak, her iki durumda da sonucu 2 olarak döndürecektir. Bu, büyük/küçük harfe duyarlı olmayan bir aramadır.
vbDatabaseCompare: Bu yalnızca Microsoft Access için kullanılır. Burada vbDatabaseCompare yerine 2 girebiliriz.
VBA InStr Fonksiyon Örnekleri
Örnek 1 – Belirtilen Karakterin Pozisyonunu Bul
'A' harfinin çeşitli konumlardaki yerini bulmak için 'Abaküs Öğrenimi' kelimesini kullanacağız .
- Adım 1: İlk olarak makroya bir isim vererek alt rutin prosedürünü başlatın.

- Adım 2: Daha sonra InStr fonksiyonunun sonucunu atayacak bir değişken tanımlayın.

- Adım 3: Daha sonra metin değerini atayacak başka bir değişken tanımlayın.

- Adım 4: Şimdi hedeflenen alt dizeyi atamak için bir değişken daha tanımlayın.

- Adım 5: Daha sonra 'Actual_String' değişkenine 'Abacus Learning' kelimesini atayın.

- Adım 6: Benzer şekilde 'A' kelimesini 'Required_String' değişkenine atayın.

- Adım 7: Şimdi değişkene InStr fonksiyonu tarafından verilen değeri atayacağız.

- Adım 8: Daha sonra başlangıç pozisyonunu 1 olarak verin.

- Adım 9: Daha sonra 1. dize için 'Actual_String' değişken adını verin.

- Adım 10: Şimdi, 2. dize için 'Required_String' değişken adını verin.

- Adım 11: Benzer şekilde, karşılaştırma yöntemi için 0 veya vbBinaryCompare'i kullanalım.

- Adım 12: Ardından, değişken adını mesaj kutusuna atayın.

Aşağıda kodun tamamı yer almaktadır.
Sub Instr_Function()
Dim k As Integer
Dim Actual_String As String
Dim Required_String As String
Actual_String = "Abacus Learning"
Required_String = "a"
k = InStr(4, Actual_String, Required_String, vbBinaryCompare)
MsgBox kEnd Sub
Şimdi bu kodu çalıştırdığımızda sonuç 1 olarak dönecek.

Şimdi, verdiğimiz string 'A' ve büyük/küçük harfe duyarlı arama için ikili karşılaştırmayı verdik.
'Abacus Learning' kelimesinde büyük harf 'A' ilk sırada yer aldığından, InStr fonksiyonu değeri 1 olarak döndürüyor.
- A harfini büyük harften küçük harfe çevirme: Şimdi, harfi büyük harften küçük harfe çevirelim.

Şimdi kodu çalıştırdığınızda aşağıdaki sonucu alacaksınız.

Şimdi sonuç 3 yani ilk harf A pozisyonu bulmak için dikkate alınmadı. Bu nedenle, 'Abacus Learning' kelimesindeki 3. örneği döndürdü .
- Başlangıç pozisyonunu değiştir: Varsayılan olarak InStr başlangıcı 1 olarak alır, mevcut kodda bunu 4 olarak değiştirelim.

Daha sonra bu kodu çalıştırdığımızda aşağıdaki sonucu elde edeceğiz.

Şimdi sonuç 10.
'Abaküs Öğrenme ' kelimesinde 'a' harfinin 4. sıradan itibaren yeri 10'dur .
Örnek 2 – Tüm Benzer Çalışma Sayfalarını Gizle
Şimdi, VBA'da InStr işlevini kullanmanın gelişmiş örneklerinden bazılarını verelim. Örneğin, Excel çalışma kitabındaki aşağıdaki çalışma sayfalarına bakın.

Excel çalışma kitabında birçok çalışma sayfamız var. Şimdi, 'Ay' kelimesini içeren tüm çalışma sayfalarını gizlememiz ve 'Ay' kelimesini içermeyen çalışma sayfalarını gizlemememiz gerekiyor.
Aşağıda 'Ay' adlı tüm çalışma sayfalarını gizlememize yardımcı olan VBA kodu yer almaktadır.
Sub Instr_Example_Çalışma_Sayfalarını_Gizle()
Dim Ws As Worksheet
'WS = Worksheet
For Each Ws In ActiveWorkbook.Worksheets
If InStr(Ws.Name, "Month") > 0 Then
Ws.Visible = xlSheetHidden
End If
Next WsEnd Sub
Şimdi size kodu açıklayalım.

Öncelikle 'Ws' değişkenini tanımladık ve nesnenin veri türünü çalışma sayfası olarak atadık.

Daha sonra tüm çalışma sayfalarını dolaşacak FOR EACH döngüsünü başlattık.
FOR EACH döngüsünün içinde, çalışma sayfası adını kontrol etmek için IF mantıksal ifadesini InStr işleviyle birlikte kullandık. Burada, InStr işlevi çalışma sayfası adını kontrol edecek ve 'Ay' sözcüğüne sahip olup olmadığını bulacak, çalışma sayfası adı 'Ay' sözcüğüne sahipse, InStr işlevi 'Ay' sözcüğünün tam çalışma sayfası adındaki konumunu döndürecek, bu nedenle sayı 0'dan büyük olacaktır.
Artık InStr fonksiyonu 0'dan büyük bir sayı döndürdüğünde, o çalışma sayfasını gizleyecektir.
Daha sonra bu kodu çalıştırdığınızda 'Ay' adlı tüm çalışma sayfalarının gizlenmesi gerekir.

Benzer şekilde, 'Ay' çalışma sayfası adına sahip tüm öğeleri göstermek istiyorsak aşağıdaki kodu kullanabiliriz.
Sub Instr_Example_UnHide_Worksheets()
Dim Ws As Worksheet
'WS = Worksheet
For Each Ws In ActiveWorkbook.Worksheets
If InStr(Ws.Name, "Month") > 0 Then
Ws.Visible = xlSheetVisible
End If
Next WsEnd Sub
Şimdi, bu kodu çalıştırdığımızda, içinde 'Ay' kelimesi bulunan tüm gizli çalışma sayfalarını gizleyecektir. 'Ay' adı olmadan başka bir çalışma sayfası gizlenmişse, onları gizlemeyecektir.
Örnek 3 – Adınızı ve Soyadınızı Çıkarın
Tam adınızdan ad ve soyadını çıkarmak, çalışma sayfası fonksiyonlarında hepimizin yaptığı yaygın bir görevdir.
Örneğin Excel’de şu verilerimiz var.

Sonra, A sütununda tam adlarımız var ve B ve C sütunlarında sırasıyla adı ve soyadını çıkarmamız gerekiyor. Şimdi, aşağıdaki koda bakın:
Sub Instr_Example_Ad_Soyadı()
Dim k As Integer
Dim LR As Integer
Dim Space As Integer
Dim Lenght As Integer
LR = Cells(Rows.Count, 1).End(xlUp).Row
For k = 2 To LR
Space = InStr(Cells(k, 1).Value, " ")
Lenght = Len(Cells(k, 1).Value)
Cells(k, 2).Value = Left(Cells(k, 1).Value, Space - 1)
Cells(k, 3).Value = Right(Cells(k, 1).Value, Length - Space)
Next kEnd Sub
Şimdi size kodu açıklayalım.
- Değişken Bildirimi: Bazı değişkenleri bildirdik ve bunlar şunlardır:

Dim k As Integer – Bu, döngüyü tüm hücrelerde dolaşmak için uygulamaktır.
Dim LR As Integer – Bu, A sütununda kullanılan son satırı bulmak içindir.
Dim Space As Integer – Bu, verilen metindeki boşluk karakterinin konumunu bulmak içindir.
Dim Lenght As Integer – Bu, verilen metnin toplam karakter sayısını bulmak içindir.
- Son Kullanılan Satırı Bul: Şimdi, son kullanılan satır numarasını bulup bunu LR değişkenine atayacağız.

- Döngüyü Başlat: Sonra, tüm hücreleri dolaşmak için döngüyü başlatıyoruz.

Daha sonra 'k' değişkenini kullanarak başlangıç noktası 2 ve bitiş noktası son kullanılan satıra (LR) eşit olacak şekilde döngüyü başlattık.
- Metindeki Boşluk Karakterini Bul: Şimdi, 'Boşluk' değişkeni için, geçerli döngü hücresindeki boşluk karakterinin konumunu bulmamız gerekiyor.

- Metindeki toplam karakteri bul: Sırada, verilen metindeki toplam karakter sayısını bulup bunu 'Uzunluk' değişkenine atıyoruz.

- Adı Çıkar: Şimdi LEFT işlevini kullanarak adı çıkaracağız. LEFT excel işlevi, metnin sol tarafındaki karakterleri çıkaracaktır. Çıkarmamız gereken karakter sayısı boşluk karakterine bağlıdır.
Şimdi, InStr fonksiyonunu kullanarak metin değerindeki boşluk konumunu zaten bulduk. İlk adda boşluk karakterine ihtiyacımız olmadığı için -1 uyguladık.

- Soyadını Çıkar: Şimdi soyadını RIGHT fonksiyonunu kullanarak çıkarıyoruz. RIGHT excel fonksiyonu metnin sağ tarafındaki değerleri çıkaracaktır.
Şimdi bunun için metin değerinin toplam uzunluğundan boşluk karakterinin konumunu çıkarıyoruz.

Bu kodu çalıştırdığımızda adımızı ve soyadımızı alacağız.

VBA'daki InStr fonksiyonu verilen metnin ana metin içindeki konumunu döndürür. Örneğin, 'Melbourne' kelimesindeki 'e' metnini bulmak istiyorsak, aşağıdaki kodu kullanabiliriz.
Şimdi, bu sonucu 2 olarak döndürecektir çünkü "e" harfi 'Melbourne' kelimesinde ikinci sırada yer almaktadır.
Evet, InStr büyük/küçük harfe duyarlı bir fonksiyondur. Büyük/küçük harfe duyarlı olmayan bir arama yapmak için InStr fonksiyonunun compare argümanına vbTextCompare seçeneğini vermemiz gerekir.
Genellikle, VBA InStr fonksiyonu tarafından döndürülen sonucu değişkene atarız. InStr sonucu bir tam sayı olarak döndürdüğünden değişken veri türü yalnızca bir tam sayı olmalıdır.
