Temel fikir, belirli bir değeri aramak için VBA Find yöntemini kullanmak ve ardından belirtilen aralıkta aynı değerin bir sonraki oluşumunu bulmak için değer içeren VBA Find Next hücresini kullanmaktır. Aşağıdaki örneği ele alalım:


Yukarıda verilen hayvanlar listesinde "Cat"i aramak için bir alt rutin oluşturun. Sonra "Cat"in bir sonraki oluşumunun adresini bulun ve yazdırın.

“Cat” değeri “A3” hücresinde ve “A9” hücresinde mevcuttur. VBA Find fonksiyonu kullanılarak, cat değeri “A3” hücresinde bulunur, ardından VBA Find Next satırında verilerle birlikte, yazdırılmadan önce “A9” hücresine güncellenir.
ÖNEMLİ NOKTALAR
- VBA'da FindNext yöntemi, belirli bir değerin veya ölçütün bir aralıktaki örneklerini aramak ve bulmak için Find yöntemiyle birlikte kullanılır.
- İlk oluşumu bulmak için Find metodu kullanıldıktan sonra, FindNext belirtilen aralıktaki bir sonraki oluşumu bulmak için kullanılır.
- Genellikle, belirtilen değerin aralıktaki tüm oluşumlarını yinelemek için bir döngüde kullanılır.
- Döngü genellikle FindNext yöntemi ilk bulunan hücreye döndüğünde sonlanır ve bu, tüm oluşumların işlendiğini gösterir.
- FindNext'i kullanmak için, döngünün her yinelemesinde bulunan mevcut hücrenin referansının bir sonraki bulunan hücreye güncellenmesi gerekir.
- Belirli hücreleri güncelleme, satırların tamamını kopyalama veya belirli bir değerin bir aralıktaki tüm oluşumlarında başka eylemler gerçekleştirme.
Excel VBA'da Sonrakini Bul Nasıl Kullanılır?
VBA Sonrakini Bul hücresinin değerle nasıl kullanılacağını öğrenmek için adımları izleyin.
- Excel Çalışma Kitabını açtığınızda, başlık çubuğundan “Geliştirici” simgesini seçin ve üzerine tıklayın.

Geliştirici simgesine tıkladıktan sonra “Visual Basic”i seçin. Bu, kodlamaya başlayabileceğiniz VBA Düzenleyicisini açar.

Editör’de “Ekle” butonuna tıklayın ve “Modül” seçeneğini seçin.
- Verilen tablo için değer içeren VBA Sonraki Bul hücresini kullanmak için alt rutini adlandırın.


- Alt programın çalışacağı aralığı ayarlayın.

- VBA Find fonksiyonunu kullanarak tabloda “Turuncu” dizesini bulun ve bunu Aralık veri türündeki bir değişkende saklayın.

- Değişkenin boş olup olmadığını kontrol edin ve ardından adresini başka bir değişkene atayın.

- Değişkenin adresinin Debug.Print kullanılarak hemen sekmeye yazdırıldığı bir Do döngüsü başlatın.

- Söz konusu dizenin birden fazla örneğini bulmak için aralığı güncellemek amacıyla, VBA Sonrakini Bul satırını verilerle başlatın.

- Dizenin başka bir örneği yoksa, Do döngüsünden bir If koşuluyla çıkın ve daha önce bulunan varsayılan adresi ayarlayın.

- Do döngüsünü sürdürerek dizenin tüm örneklerinin bulunmasını sağlayın.

Kod:
Sub FindNextExample()
Dim rng As Range
Set rng = Worksheets(“Sheet2”).Range(“A2:A10”)
Dim firstFound As Range
Set firstFound = rng.Find(What:=”Orange”)
If Not firstFound Is Nothing Then
firstAddress = firstFound.Address
Do
Debug.Print firstFound.Address
Dim nextFound As Range
Set nextFound = rng.FindNext(After:=firstFound)
If nextFound Is Nothing Then Exit Do
Set firstFound = nextFound
Loop While firstFound.Address <> firstAddress
Else
MsgBox “TargetValue not found in the specified range.”
End If
End Sub - Alt rutini çalıştırmak için Excel VBA'daki etkinlik çubuğundaki “F5” veya “Çalıştır” simgesine tıklayın.

Artık VBA FindNext fonksiyonunun nasıl kullanılacağını başarıyla öğrendiniz.
Excel VBA'da Sonrakini Bul Yönteminin Örnekleri
VBA FindNext'i kendi amaçlarınız doğrultusunda kullanmanın farklı yollarını görün.
Örnek 1
Diyelim ki bir sayı kümeniz var. Belirli bir sayının tüm kullanılabilir örneklerini bulmak ve bunları vurgulamak için arka planı farklı şekilde renklendirmek istiyorsunuz. Bunu yapmak için VBA Sonrakini Bul işlevini kullanabilirsiniz.

- Adım 1: '2' örneğinin sayısını bulmak için bir alt rutin tanımlayın ve bunları vurgulayın.

Adım 2: VBA With fonksiyonunu kullanarak, birden fazla fonksiyonu düzgün bir şekilde bir aralıkta birleştirebilirsiniz. Burada aralık tanımlanmıştır.

- Adım 3: Yukarıda tanımlanan tablonun aralığında '2' değerinin aralığını bulun.

- Adım 4: '2' sayısının adres aralığının boş olup olmadığını bir If koşulu kullanarak kontrol edin ve adresini yeni bir değişkene atayın.

- Adım 5: Aşağıdaki fonksiyonları döngüye alan bir Do döngüsü tanımlayın.

Hücrede 2 sayısı bulunursa iç renk pembeye, yazı rengi beyaza dönüşür. Daha sonra adres VBA Sonrakini Bul fonksiyonu kullanılarak güncellenir.
- Adım 6: İlk değer olmadığında ve adres boş olmadığında do döngüsüne devam edin.

- Adım 7: VBA'yı With fonksiyonuyla sonlandırın.

Kod:
Sub ExampleWithLoop()
With Worksheets(“Sheet3”).Range(“a1:a10”)
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Color = RGB(200, 0, 128)
c.Font.Color = vbWhite
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub
- Adım 8: VBA kodunu çalıştırmak için “F5” tuşuna basın . Çıktı aşağıda gösterildiği gibi görüntülenir:

Örnek 2
Diyelim ki bir sebze listeniz ve fiyatları var. Herhangi bir sebzenin değerlerini bir listeye ekleyerek görüntülemek istiyorsunuz. Verilerle VBA Find Next satırını kullanabilir ve hedef fiyatları birleştirebilir ve görüntüleyebilirsiniz.

- Adım 1: Benzer hedef adlarının değerlerini birleştirmek ve değerlerini görüntülemek için bir alt rutin tanımlayın.

- Adım 2: Aranacak aralığı tanımlayın ve aralığı bir değişkende saklayın.

- Adım 3: VBA Bul fonksiyonunu kullanarak aranacak arama değerini tanımlayın.

- Adım 4: “Carrot”tan gelen değerleri depolamak için boş bir dize değişkeni tanımlayın.

- Adım 5: VBA Bul fonksiyonunu kullanarak aralık içerisinde “Havuç” değerinin adresini arayın.

- Adım 6: Aranan adresin boş olup olmadığını bir If koşulu kullanarak kontrol edin ve bulunan değerin ilk örneğinin adresini atayın.

- Adım 7: Bir Do döngüsü başlatın ve döngü içerisinde, ikinci sütundan birleştirilecek değerleri atayın.

- Adım 8: Aralıktaki diğer “Havuç” örneklerini bulmak için VBA Sonrakini Bul’u çağırın.

- Adım 9: Daha fazla örnek kalmayana kadar döngüyü çalıştırmaya devam edin. Sonra Do döngüsünden çıkın.

- Adım 10: Birleştirilmiş değerleri yazdırın. Fazladan boşluk ve virgülü yazdırmak ve silmek için, birleştirilmiş değerlerin VBA Sol işlevindeki uzunluğuna göre birleştirilmiş değerlerin uzunluğundan 2 çıkarmanız gerekir .

- Adım 11: Değer mevcut değilse bir Else koşulu bildirin.

Kod:
Sub ConcatenateValuesForTarget()
Dim searchRange As Range
Set searchRange = Worksheets(“Sheet4”).Columns(“A”)
Dim targetValue As String
targetValue = “Carrot”
Dim concatenatedValues As String
concatenatedValues = “”
Dim foundCell As Range
Set foundCell = searchRange.Find(What:=targetValue, LookIn:=xlValues)
If Not foundCell Is Nothing Then
Dim firstFoundCell As Range
Set firstFoundCell = foundCell
Do
concatenatedValues = concatenatedValues & Worksheets(“Sheet4”).Cells(foundCell.Row, “B”).value & “, “
Set foundCell = searchRange.FindNext(After:=foundCell)
If foundCell Is Nothing Or foundCell.Address = firstFoundCell.Address Then Exit Do
Loop
MsgBox “Concatenated values for ” & targetValue & “: ” & Left(concatenatedValues, Len(concatenatedValues) – 2)
Else
MsgBox targetValue & ” not found in the specified range.”
End If
End Sub
- Adım 12: Kodu çalıştırmak istediğinizde yeşil ok düğmesine tıklayın. Çalıştırıldığında bir Mesaj Kutusu açılacaktır.

Örnek 3
İsimlere dayanarak çalışma durumlarını "Güncellendi" olarak değiştirmeniz gereken bir örneği ele alalım. Bir kullanıcı çalışanın adını girerse, durum sütunu son sütunda "Güncellendi" olarak değişmelidir. Benzer isimleri bulmak için VBA FindNext'i kullanabilirsiniz.

- Adım 1: Listede birden fazla çalışan adı varsa, çalışanın durumunu tek seferde değiştirmek için bir alt rutin tanımlayın.

- Adım 2: VBA InputBox fonksiyonu ile kullanıcıdan çalışan adını alın.

- Adım 3: VBA find fonksiyonunu kullanarak çalışan adının aralığını bulun ve ardından bunu bir değişkende saklayın.

- Adım 4: Hedef çalışanı tutan aralık değişkeninin boş olup olmadığını kontrol edin. Boş değilse, hedef çalışanın bulunduğu adresi depolamak için bir VBA Aralık değişkeni tanımlayın. Bu adres, Do Döngüsünde VBA FindNext işlevi her çağrıldığında güncellenecektir.

- Adım 5: Bir Do Döngüsü başlatın ve çalışan adının bulunduğu satırın 4. sütununu atayın.

- Adım 6: Çalışanın listeye girdiği bir sonraki örneğin adresini yeni bir değişkene atayın.

- Adım 7: Çalışanın adının hiçbir örneği kalmadıysa, Do Döngüsünden çıkın.

- Adım 8: Çalışanın mevcut adresi ilk örneğe eşit olmadığında döngüye devam et.

- Adım 9: Birleştirilmiş değerleri bir mesaj kutusunda yazdırın.

- Adım 10: Çalışan adı mevcut değilse Else koşulunu tanımlayın.

Kod:
Sub UpdateStatusUsingFindNext()
Dim searchRange As Range
Set searchRange = Worksheets(“Sheet5”).Columns(“A”)
Dim targetName As String
targetName = InputBox(“Enter the target name”)
Dim foundCell As Range
Set foundCell = searchRange.Find(What:=targetName, LookIn:=xlValues)
If Not foundCell Is Nothing Then
Dim firstFound As Range
Set firstFound = foundCell
Do
Worksheets(“Sheet5”).Cells(foundCell.Row, “D”).value = “Updated”
Dim nextFound As Range
Set nextFound = searchRange.FindNext(After:=foundCell)
Set foundCell = nextFound
If foundCell Is Nothing Then Exit Do
Loop While foundCell.Address <> firstFound.Address
MsgBox “Status updated for all occurrences of ” & targetName
Else
MsgBox targetName & ” not found in the specified range.”
End If
End Sub
- Adım 11: Yukarıdaki alt rutini çalıştırın ve değişiklikleri görmek için “Sheet5”e gidin. VBA'da adını girmeniz gereken bir InputBox olacak .



Dikkat Edilmesi Gereken Önemli Noktalar
- Bir sonraki örneği aramaya devam etmek için Find metodunu kullandıktan sonra her zaman FindNext'i kullanın.
- VBA Find Next'in boş sütununu elde etmek için, aralıktaki belirtilen değerin tüm oluşumlarını yinelemek üzere bir döngü içinde FindNext'i kullanın.
- Aralıkta doğru gezinmeyi sağlamak için döngünün her yinelemesinde bulunan hücrenin referansını güncelleyin.
- Döngünün her zaman sonsuza kadar devam edeceğini varsaymayın. Belirli gereksinimlerinize göre bir sonlandırma koşulu ekleyin.
- Aynı döngü içerisinde Find ve FindNext'i etkin bir şekilde kullanırken arama aralığını değiştirmekten (örneğin, VBA'da satır ekleme veya silme ) kaçının.
- Bulunan oluşumların her zaman ardışık olacağını varsaymayın. FindNext aramayı geçerli hücreden devam ettirir, mutlaka aralığın en üstünden değil.
