Ana içeriğe atla

VBA InStr İşlevi: Excel VBA’de Metin Nasıl Aranır

VBA InStr işlevini, sözdizimi, örnekler, büyük/küçük harf duyarlılığı ve yaygın hatalar dahil olmak üzere, dizelerin içinde metin bulmak için nasıl kullanacağınızı öğrenin.
Güncel 21 Eyl 2026  · 9 dk. oku

Yapay Zekâyla Keşfet

ChatGPTClaudePerplexity

Birkaçdan fazla VBA makrosu yazdıysanız, muhtemelen bir hücrede belirli bir metnin olup olmadığını kontrol etmeniz gereken o ana gelmişsinizdir. VBA’de InStr, her yerde kullanmaya başladığınız işlevlerden biridir. Bir metnin başka bir metin içinde nerede göründüğünü söyler. Bir metnin hücrede olup olmadığını kontrol etmek, metin içindeki değerleri ayrıştırmak ya da metin kalıplarına bağlı koşullu mantığı yönlendirmek için kullanabilirsiniz.

Bu rehberde, InStr sözdizimini, birkaç örneği, karşılaştırma kiplerinin nasıl çalıştığını (insanların gerekenden fazla takıldığı kısım) ve gerçekten tekrar kullanacağınız bazı kalıpları anlatacağım.

VBA’ya geçmeden önce sağlam bir temel oluşturmak için Excel Temelleri yetkinlik yolumuza başlamanızı veya biraz deneyiminiz varsa, işlevlerin veri analizinde verimliliği nasıl artırdığını öğrenmek için Gelişmiş Excel İşlevleri kursumuzu almanızı öneririm.

VBA InStr İşlevi Nedir?

InStr, bir dizenin içinde başka bir dizenin ilk geçtiği konumu döndüren bir VBA işlevidir.

Sonuçlar şu şekilde davranır:

  • Eşleşme bulunursa bir sayı döndürür (eşleşmenin başladığı konum)
  • Hiçbir şey bulamazsa 0 döndürür

Örneğin, “cat” bir dizede 5. konumda geçiyorsa, 5 alırsınız. Orada değilse 0 alırsınız.

VBA InStr Sözdizimi

Tam InStr sözdizimi şöyledir:

InStr([start], string1, string2, [compare])

Burada:

  • start (isteğe bağlı): VBA’ya aramaya nereden başlayacağını söyler. Atlanırsa VBA 1. konumdan başlar.

  • string1 (zorunlu): İçinde arama yaptığınız tam metin.

  • string2 (zorunlu): Bulmaya çalıştığınız metin.

  • compare (isteğe bağlı): Karşılaştırmanın nasıl yapılacağını tanımlar (büyük/küçük harf duyarlı olup olmadığı). Bunu boş bırakırsanız, VBA varsayılan karşılaştırma kipini kullanır, genellikle büyük/küçük harf duyarlıdır.

Daha basit bir sürüm için start ve compare bağımsız değişkenlerini yok sayabilirsiniz (InStr(string1, string2)). Ancak compare bağımsız değişkenini kullanmaya karar verirseniz, start bağımsız değişkenini de sağlamanız gerekir.

VBA InStr Nasıl Çalışır

InStr’ı soldan sağa, karakter karakter bir cümleyi okumak gibi düşünün.

İşlev string1 ile başlar, onu tarar ve string2’nin ilk eşleştiği yeri arar. Eşleşmeyi bulduğu anda durur ve başladığı konumu döndürür.

“Eşleşme” konumu önemlidir çünkü VBA saymaya 0’dan değil 1’den başlar. Yani bir dizenin ilk karakteri 1. konum, ikincisi 2. ve bu şekilde devam eder. 

VBA InStr Dönüş Değerlerinin Açıklaması

InStr işlevinin sonucunu yorumlamak basittir. Şunlardan birini alırsınız:

  • Pozitif sayı: Eşleşme bulunursa, sayı eşleşmenin nerede başladığını gösterir.

  • 0: Dizede hiçbir yerde eşleşme yoksa

Ancak, giriş dizeleriniz Null ise işlev Null döndürür. Bunu basit makrolar için yok sayabilirsiniz ama farkın bir koşulu sessizce bozabileceğini bilmeye değer.

Temel VBA InStr Örnekleri

Şimdi VBA InStr işlevinin nasıl kullanılacağına dair birkaç örnek göstereyim. 

Bir cümlede bir kelimeyi bulma

“Deliver before noon” notunun içinde “before” kelimesi olup olmadığını kontrol etmek için.

Sub Before()

    Dim result As Integer
    result = InStr("Deliver before noon", "before")
    
    MsgBox result

End Sub

Yukarıdaki VBA’nın sonucu 9’dur; çünkü “before” 9. karakterde başlar.

Bir karakterin var olup olmadığını kontrol etme

Belirli bir dizede “0” karakterinin olup olmadığını kontrol etmek için şu VBA’yı kullanın:

Sub ChExist()

    Dim result As Integer
    result = InStr(“A1023”, “0”)
    
    MsgBox result

End Sub

Bu durumda 0’dan büyük herhangi bir sonuç, karakterin bulunduğu anlamına gelir.

Bir dizenin başından itibaren arama yapma

Bir dizenin başından arama yapmak için başlangıç konumunu belirtmenize gerek yoktur; böylece 1’den başlar. Aksi belirtmediğiniz sürece varsayılan her zaman budur.

Sub ChExist()

    Dim result As Integer
    result = InStr("Report_2026_Final", "2026")
    
    MsgBox result

End Sub

VBA InStr’ı If İfadelerinde Nasıl Kullanılır

Gerçek bir elektronik tabloda çalışırken yalnızca bir sayı aramazsınız; bir karar vermeye çalışırsınız. InStr’ı kullanmanın en yaygın yolu, verileri filtrelemek için bir If ifadesinin içinde kullanmaktır.

Bu eğitim boyunca, sütunları ID, CustomerName, Email, City ve OrderNotes olan bir örnek veri kümesi olan Orders’ı kullanacağız.

If InStr(...) > 0 Then

InStr hiçbir şey bulamadığında 0 döndürdüğü için, sonuç 0’dan büyük bir sayı döndürdüğünde var olup olmadığını kontrol ederiz.

Aşağıdaki örnekte, OrderNotes sütununa (5. sütun) bakar. “Fragile” kelimesini bulursa 6. sütuna “Handle Carefully” yazar.

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        ' Check if the order notes mention "Fragile"
        If InStr(Cells(i, 5).Value, "Fragile") > 0 Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

Anahtar kelimeler için koşullu kontroller ve metin filtreleme

InStr işlevini, özellikle ifade biraz değişiyorsa, dizelerde anahtar kelimeleri kontrol etmek için de kullanabilirsiniz. Örneğin, aşağıdaki kod notta “Call” geçip geçmediğini kontrol eder ("Call on arrival" veya "Call before delivery" gibi). Ardından işaretler ve 6. sütuna “Cal Customer” etiketini ekler.

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        ' Check if the order notes mention “Call”
        If InStr(Cells(i, 5).Value, “Call”) > 0 Then
            Cells(i, 6).Value = “Call Customer”
        End If
        
    Next i

End Sub

VBA InStr’da Büyük/Küçük Harf Duyarlılığı ve Karşılaştırma Kipleri

Varsayılan olarak InStr büyük/küçük harf duyarlıdır (vbBinaryCompare olarak adlandırılır). Diyelim “chicago” arıyorsunuz ama veride “Chicago” yazıyor; InStr 0 döndürecektir.

Bunu düzeltmek için compare bağımsız değişkenini kullanırsınız; burada:

  • vbBinaryCompare (Varsayılan): büyük/küçük harf duyarlı (“A” “a” ile aynı değildir.)

  • vbTextCompare: büyük/küçük harf duyarsız; “A” “a” ile aynıdır.

Aşağıdaki örnekte, “fragile” (küçük harf) ifadesini “Fragile items” içinde aradığı için InStr 0 döndürür.

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbBinaryCompare)
    
    MsgBox result

End Sub

Buna karşın vbTextCompare kullanmak, aynı aramada büyük/küçük harfi yok sayarak 1 döndürür.

Sub CheckFragile()

    Dim result As Integer
    
    result = InStr(1, "Fragile items", "fragile", vbTextCompare)
    
    MsgBox result

End Sub

Başlangıç Konumu ile VBA InStr

Bazen aramaya dizenin başından başlamak istemezsiniz. start bağımsız değişkeni VBA’ya aramaya nereden başlayacağını söyler.

Aşağıdaki örnekte start bağımsız değişkeni 10 olarak ayarlanmıştır; bu nedenle VBA birinci yerine 10. karakterden itibaren aramaya başlar. Daha sonra dizenin ilerleyen kısmında "delivery" ifadesini bulur.

Sub CheckUrgent()

    Dim result As Integer
    
    result = InStr(10, “Deliver before noon - urgent delivery”, “delivery”)
    
    MsgBox result

End Sub

Yukarıdaki örneğin sonucu, "delivery" ifadesinin başladığı konum olan 31’dir.

Bu yöntem, bir şeyin ikinci geçişini istediğinizde ya da tekrar eden kalıplarla çalışırken bilinen bir ön eki yok saymak istediğinizde kullanışlıdır.

VBA InStr ve InStrRev Karşılaştırması

Öğrendiğiniz üzere InStr soldan sağa arar. Ancak InStrRev sağdan sola arar.

Örneğin, e-postadaki son noktayı bulmak için InStrRev kullandık. Sonuç, “com”dan önceki noktanın konumu olan 18’dir.

Sub CheckChr()

    Dim result As Integer
    
    result = InStrRev("john.jacobs@email.com", ".")
    
    MsgBox result

End Sub

InStrRev’i, bir şeyin son geçişine ihtiyaç duyduğunuzda veya dosya adları, e-postalar ya da yollarla çalışırken daha kullanışlı bulacaksınız.

Yaygın VBA InStr Kullanım Alanları

Artık VBA InStr işlevinin nasıl çalıştığına dair örneklere baktığımıza göre, yaygın kullanım alanlarına göz atalım.

Bir hücrenin anahtar kelime içerip içermediğini kontrol edin

Diyelim müşteri siparişlerinden oluşan bir veri kümeniz var ve belirli bir işlem gerektiren siparişleri işaretlemeniz gerekiyor. Kod, OrderNotes sütununa bakar ve “noon” içeren her şeyi işaretler.

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If InStr(1, "Deliver before noon", "noon", vbTextCompare) > 0 Then
            ' Logic to mark as "Morning Delivery"
        End If
        
    Next i

End Sub

E-posta biçimine benzer metni doğrulayın

InStr işlevini geçerli e-posta biçimlerini hızlıca kontrol etmek için de kullanabilirsiniz. Örneğin, aşağıdaki kod e-postada @ olup olmadığını kontrol eder ve 6. sütunda “Valid Email Format” döndürür.

Sub ValidateEmail()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If InStr(Cells(i, 3).Value, "@") > 0 Then
            Cells(i, 6).Value = "Valid Email Format"
        End If
        
    Next i

End Sub

Virgül veya kısa çizgi gibi ayırıcıları tespit etme

InStr işlevini metinde kısa çizgi, virgül veya eğik çizgi olup olmadığını kontrol etmek için kullanabilirsiniz. Aşağıdaki örnekte, kod OrderNotes (E sütunu) içinde döngü yapar, metinde virgül olup olmadığını kontrol eder, ardından F sütununa bir sonuç yazar.

Sub ValidateEmail()

    Dim i As Integer
    Dim commaPos As Integer
    Dim OrderNotes As String
    
    For i = 2 To 51
        
        OrderNotes = Cells(i, 5).Value
        
        commaPos = InStr(1, OrderNotes, ",")
        
        ' If a comma exists, mark it
        If commaPos > 0 Then
            Cells(i, 6).Value = "Has comma"
        Else
            Cells(i, 6).Value = "No comma"
        End If
        
    Next i

End Sub

VBA InStr ile Yapılan Yaygın Hatalar

Deneyimli bir geliştirici olsanız bile, InStr işleviyle kodunuzun beklenmedik şekilde davranmasına neden olan bazı sorunlarla karşılaşabilirsiniz. Aşağıdakiler, benim karşılaştığım yaygın sorunlardır ve nasıl çözebileceğiniz:

  • InStr’ın 1 tabanlı olduğunu unutmak: Konumların 0 değil 1’den başladığını her zaman hatırlayın. Python veya JavaScript’ten geliyorsanız bu ilk başta garip gelebilir.

  • InStr’ı Doğru/Yanlış gibi ele almak: Unutmayın, InStr True veya False döndürmez. Bir şey bulmak istiyorsanız, sonucun > 0 olup olmadığını kontrol etmelisiniz.

  • Büyük/küçük harf duyarlılığını yok saymak: Bildiğiniz gibi InStr varsayılan olarak büyük/küçük harf duyarlıdır. Harf duyarlılığı önemli değilse, compare bağımsız değişkeninde vbTextCompare kullanarak bunu belirtin.

  • string1 ve string2’yi karıştırmak: İlk bağımsız değişkenin arama yapılan yer olduğunu, ikincisinin aranan şey olduğunu unutmayın. Şu şekilde arama yaparsanız InStr(SearchTerm, FullText), her zaman 0 alırsınız.

VBA InStr ve Diğer VBA Dize İşlevleri

InStr genellikle bir metin içinde bir dizenin nerede olduğunu gösterdiği için, onu diğer dize işlevleriyle karşılaştıralım.

InStr ve Like

Like işleci, desen eşleştirme için kullanılır. Örneğin, aşağıdaki kod “Fragile”ı kontrol eder ancak “öncesinde veya sonrasında herhangi bir şey” anlamına gelen * desenini kullanır.

Sub ChExist()

    Dim i As Integer
    
    ' Loop through rows 2 to 51
    For i = 2 To 51
    
        If Cells(i, 5).Value Like "*Fragile*" Then
            Cells(i, 6).Value = "Handle Carefully"
        End If
        
    Next i

End Sub

InStr’ı yalnızca bir metnin var olup olmadığını bilmeniz gerekiyorsa, Like’ı ise karmaşık desenlerde metni kontrol etmeniz gerekiyorsa kullanın.

InStr ve Replace

InStr’ı bir hücredeki tüm değeri değiştirmek için kullanabilseniz de, Replace işlevi hücre içindeki belirli metni değiştirir.

Aşağıdaki örnekte Replace işlevi metin içinde “Fragile”ı doğrudan “Handle Carefully” ile değiştirir.

Sub ReplaceOrder()

    Dim i As Integer
    
    For i = 2 To 51
        Cells(i, 5).Value = Replace(Cells(i, 5).Value, "Fragile", "Handle Carefully")
    Next i

End Sub

InStr ve Mid

Mid işlevi bir dizeden metin çıkarmak için kullanılır. Bu nedenle, konumu elde ettikten sonra metni çıkarmak için Mid’i sıklıkla InStr ile birlikte kullanırsınız. 

Aşağıdaki kod veri kümesindeki e-postalardan alan adını çıkarır. InStr işlevi e-postada "@" işaretinin nerede göründüğünü bulur, ardından Mid ondan sonra çıkarmaya başlar. Kod, alan adını H sütununa yazarak biter.

Sub ExtractDomain()

    Dim i As Integer
    Dim pos As Integer
    Dim domain As String
    
    For i = 2 To 51
        
        pos = InStr(1, Cells(i, 3).Value, "@")
        
        If pos > 0 Then
            domain = Mid(Cells(i, 3).Value, pos + 1)
            Cells(i, 8).Value = domain
        End If
        
    Next i

End Sub

InStr ve Split

Split işlevi, bir ayırıcı belirterek metni parçalara bölmek için kullanılır. 

Aşağıdaki örnekte kod, A sütunundaki her satırı okur, virgül olup olmadığını kontrol eder ve ardından metni iki parçaya böler. Name → B sütununa ve City → C sütununa yazar.

Sub SplitTextColumn()

    Dim i As Integer
    Dim lastRow As Integer
    Dim parts As Variant
    Dim text As String
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        
        text = Cells(i, 1).Value
        
        ' Only split if a comma exists
        If InStr(1, text, ",") > 0 Then
            
            parts = Split(text, ",")
            
            Cells(i, 2).Value = parts(0) ' Name
            Cells(i, 3).Value = parts(1) ' City
            
        End If
        
    Next i

End Sub

VBA InStr Kullanımı için En İyi Uygulamalar

VBA’de hatalar almamak için, bana zaman kazandıran şu en iyi uygulamaları öneririm:

  • Büyük/küçük harf önemli değilse vbTextCompare kullanın: Çoğu gerçek veri büyük/küçük harf açısından tutarlı değildir; varsayılan karşılaştırma bağımsız değişkenine güvenirseniz eşleşmeleri kaçırabilirsiniz.

  • Net mantık için “If” ile birleştirin: InStr tek başına size sadece bir sayı verdiğinden, her zaman bir değer döndürecek bir mantık eklemeye çalışın.

  • > 0 olup olmadığını kontrol edin; gerçek konumlara yalnızca gerçekten konuma ihtiyacınız varsa bakın.

  • Ayrıştırmayı okunabilir tutun. Çok fazla işlevi tek satırda üst üste yığmayın.

Sonuç

InStr basittir, ancak her yerde kullanırsınız. Bir dizenin başka bir dize içinde nerede olduğunu verir ve bu tek sayı, VBA’de bir şeyin var olup olmadığı, nereden çıkarım yapılacağı ve bir makronun sırada ne yapacağı gibi birçok kararı yönlendirir. Tek başına sadece bir aramadır. Mid, Replace veya hatta Split gibi işlevlerle birleştirildiğinde, gerçekten işi bitiren bir iş akışının parçası olur.

Gelişmiş analitiği ustalıkla öğrenmek için Excel’de Veri Analizi kursumuzu alın. Ayrıca, veri dönüşümü ve M dilini öğrenmek için Excel’de Orta Düzey Power Query kursumuzu da alın.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Veri analitiği, iş zekâsı ve veri bilimi alanlarında pratik deneyime sahip Veri Bilimi Teknik Yazarı. SQL, Python, Power BI, Databricks ve veri mühendisliği üzerine, gerçek dünya analitik çalışmalarına dayanan, uygulamaya dönük ve sektöre odaklı içerikler yazıyorum. Yazılarım teknik derinlikle iş etkisi arasındaki köprüyü kurarak profesyonellerin veriyi güvenle karara dönüştürmelerine yardımcı olur.

SSS

InStr gerçekte ne döndürür?

Eşleşmenin başladığı konumu döndürür. Hiçbir şey bulunamazsa 0 döndürür.

InStr büyük/küçük harf duyarlı mı?

Evet, InStr varsayılan olarak büyük/küçük harf duyarlıdır. ”Fragile” ve ”fragile” farklı kabul edilir. Büyük/küçük harfe duyarlı olmayan bir karşılaştırma istemiyorsanız vbTextCompare kullanın.

InStr’ın 1 tabanlı olması ne anlama geliyor?

Bir dizenin ilk karakteri 1. konumdur, 0 değil. Bu, sonucu diğer işlevlerde kullandığınızda önemlidir.

Değerlerden biri Null olursa ne olur?

Sonuç da 0 değil, Null olacaktır.

InStr ile InStrRev arasındaki fark nedir?

InStr soldan sağa arar, InStrRev ise sağdan sola başlar. Son geçiş önemli olduğunda ikincisini kullanın.

Konular
Excel

DataCamp ile Öğrenin

Program

Excel Temelleri

16 sa
Veri hazırlamaktan formül yazmaya ve görselleştirmeler oluşturmaya kadar Excel'i kullanmak için ihtiyacınız olan temel becerileri kazanın. Önceden deneyim gerekmez.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow