Soru Excel de arama kutusu yapmak

oglcn

Altın Üye
Katılım
11 Haziran 2021
Mesajlar
28
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
11-12-2025
Merhaba bir hücreye girilen değeri, bir veri kümesi içerisinde aratıp, eğer bulursa ilgili hücreye gitmesini sağlayacak bir formüle ihtiyacım var. Araştırdığım konular arasında maalesef çalışan kod bulamadım. en son aşağıdaki kodu denedim ama maalesef o da çalışmıyor.

özet: a1 hücresine değer gireceğiz ve c2 sütununda o değeri arayacak. varsa hücreye gidecek. arama tuşuna her basışımda ilgili değeri aramaya devam edip diğer seçenekleri gösterecek.)



en son denediğim kod:



Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range, Adr As Variant, onay As String

If Intersect(Target, [A1]) Is Nothing Then Exit Sub
If Target = "" Then Exit Sub

With Cells
Set c = .Find(Target, LookAt:=xlPart)
If Not c Is Nothing Then
Adr = c.Address
Do
c.Offset(0, 0).Select
onay = MsgBox("Tamam/Devam", vbCritical + vbYesNo, "Dikkat!")
If onay = vbYes Then Exit Sub

Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> Adr
End If
End With

Set c = Nothing

End Sub
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Verdiğiniz kodu denediğimde düzgün bir şekilde çalıştığını gördüm. Uyarı çıktığında Hayır'a basıldığında aramaya devam ediyor. Çünkü Evet seçilince işlemi sonlandırmayı seçmişsiniz.
 

oglcn

Altın Üye
Katılım
11 Haziran 2021
Mesajlar
28
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
11-12-2025
Verdiğiniz kodu denediğimde düzgün bir şekilde çalıştığını gördüm. Uyarı çıktığında Hayır'a basıldığında aramaya devam ediyor. Çünkü Evet seçilince işlemi sonlandırmayı seçmişsiniz.
Ben de hiç bir şekilde çalışmadı. herhangi bir hata mesajı da almıyorum. çalıştıra basıyorum ama hiçbir şey olmuyor. O yüzden benim işime yarar bir kod mu bilmiyorum. Ben her arama tuşuna basıldığında sonuçlar arasında geçmesini istiyorum aynı ctrl+f komutu gibi
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Makroların etkinleştirilmiş olduğundan emin misiniz?

Aşağıdaki kodları bir defaya mahsus çalıştırın. Belki herhangi bir sebeple sayfa olaylarına bağlı kodlar pasiflenmiştir:

Kod:
Sub aktif()
    Application.EnableEvents = True
End Sub
 

oglcn

Altın Üye
Katılım
11 Haziran 2021
Mesajlar
28
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
11-12-2025
Makroların etkinleştirilmiş olduğundan emin misiniz?

Aşağıdaki kodları bir defaya mahsus çalıştırın. Belki herhangi bir sebeple sayfa olaylarına bağlı kodlar pasiflenmiştir:

Kod:
Sub aktif()
    Application.EnableEvents = True
End Sub
Yok olmuyor. Ben mi yanlış yapıyorum acaba ?

Geliştirici sekmesinden vb'yi açıyoruz. Daha sonra bulunduğumuz sheete sağ tık ile insert module yapıyorum. kodu sayfaya yapıştırıyorum. F5 ile create diyerek yeni makro oluşturuyorum. daha sonra geliştiriciden bitane düğme ekleyip, oluşturduğum makroyu ona atıyorum. ve A1 hücresine değer girip düğmeye basarak çalıştırıyorum.

yaptıklarım bunlar hocam ama maalesef birşey olmuyor
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bu kod modülden çalışan bir makro değil, Sayfa olaylarına bağlı olarak çalışan bir makro. Çalışması için kodları modüle değil sayfanın kod bölümüne yani sayfa adına sağ tıklayıp kod görüntüle deyince açılan sayfaya yapıştırın. A1 hücresini değiştirdiğinizde kodlar otomatik çalışacaktır.
 

oglcn

Altın Üye
Katılım
11 Haziran 2021
Mesajlar
28
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
11-12-2025
Peki bunu modül olarak nasıl yapabilirim. 200 girdiden oluşan bir sütunum var. Bunu her seferinde filtre veya ctrl+F5 ile bulmak yerine bu şekilde bir arama kutusu ve arama butonu yapmak istiyorum. hangi kodu kullanmam lazım
 

balanar

Altın Üye
Katılım
22 Şubat 2021
Mesajlar
347
Excel Vers. ve Dili
Excel 2007
Altın Üyelik Bitiş Tarihi
09-03-2027
Peki bunu modül olarak nasıl yapabilirim. 200 girdiden oluşan bir sütunum var. Bunu her seferinde filtre veya ctrl+F5 ile bulmak yerine bu şekilde bir arama kutusu ve arama butonu yapmak istiyorum. hangi kodu kullanmam lazım
açıkcası bunu bende merak ediyorum yapılabilirmi diye
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Sayfanıza Activex denetimlerinden bir tetxbox ve commandbutton ekleyin (Adlarının TextBox1 ve CommandButton1 olduğunu kabul ediyorum). Sayfa adına sağ tıklayın ve kod görüntüle dedikten sonra açılan sayfaya aşağıdaki kodları yapıştırın Textbox' aranacak veriyi girip commandbuttona basın. C sütunundaki son dolu hücreye kadar arama yapıp, bulunanlar arasında dolaşacaktır:

PHP:
Private Sub CommandButton1_Click()
Dim c As Range, Adr As Variant, onay As String

If TextBox1 = "" Then Exit Sub

son = Cells(Rows.Count, "C").End(3).Row

With Range("C1:C" & son)
    Set c = .Find(TextBox1.Text, LookAt:=xlPart)
    If Not c Is Nothing Then
        Adr = c.Address
        Do
            c.Offset(0, 0).Select
            onay = MsgBox("Tamam/Devam (Aramaya devam etmek için Evet'i seçiniz)", vbQuestion + vbYesNo, "Dikkat!")
            If onay = vbNo Then Exit Sub
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> Adr
    End If
End With

Set c = Nothing
End Sub
 

balanar

Altın Üye
Katılım
22 Şubat 2021
Mesajlar
347
Excel Vers. ve Dili
Excel 2007
Altın Üyelik Bitiş Tarihi
09-03-2027
Yusuf hocamızın verdiği kodlarla şu şekilde uygulanacak yanlışım yoksa?

son = Cells(Rows.Count, "C").End(3).Row

buradaki 3 c sutunu 3.sırada oldugu için mi başka bir anlam mı ifade ediyor hocam?
 

Ekli dosyalar

Son düzenleme:

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Hayır, C sütununu zaten C olarak belirtmiştim. Ordaki 3 End fonksiyonunun türünü belirtiyor. End(3) bulunulan hücreden CTRL+Üst tuşları ile hareket etmek anlamını taşıyor.

Cells(rows.count, "C") ifadesi C sütunundaki son yani en alt hücredemektir. Örneğin 2007 ve sonrası versiyonlarda C1048576 hücresidir.

End(3) ise bu hücredeyken CTRL+Üst ok yap demektir. Bunu manuel olarak deneyebilirsiniz. En alt hücreye gidin ve CTRL+Üst ok tuşlarına basın. Bu hareket sizi O sütundaki son dolu hücreye götürür. En son C100 hücresi doluysa imleç C100 hücresine gelir.

.Row ifadesi ise bu işlem sonucunda gelinen hücrenin satır numarasını verir.

Bu kod satırıyla son dolu hücrenin satır numarasını buluyoruz ki daha sonraki işlemlerde arama alanını bu hücreyle sınırlandıralım, boş yere daha aşağılarda aramayalım.
 

oglcn

Altın Üye
Katılım
11 Haziran 2021
Mesajlar
28
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
11-12-2025
Sayfanıza Activex denetimlerinden bir tetxbox ve commandbutton ekleyin (Adlarının TextBox1 ve CommandButton1 olduğunu kabul ediyorum). Sayfa adına sağ tıklayın ve kod görüntüle dedikten sonra açılan sayfaya aşağıdaki kodları yapıştırın Textbox' aranacak veriyi girip commandbuttona basın. C sütunundaki son dolu hücreye kadar arama yapıp, bulunanlar arasında dolaşacaktır:

PHP:
Private Sub CommandButton1_Click()
Dim c As Range, Adr As Variant, onay As String

If TextBox1 = "" Then Exit Sub

son = Cells(Rows.Count, "C").End(3).Row

With Range("C1:C" & son)
    Set c = .Find(TextBox1.Text, LookAt:=xlPart)
    If Not c Is Nothing Then
        Adr = c.Address
        Do
            c.Offset(0, 0).Select
            onay = MsgBox("Tamam/Devam (Aramaya devam etmek için Evet'i seçiniz)", vbQuestion + vbYesNo, "Dikkat!")
            If onay = vbNo Then Exit Sub
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> Adr
    End If
End With

Set c = Nothing
End Sub

Teşekkür ederim elinize sağlık. Bu sefer çalıştı. 2 şey daha soracağım. İlki Bu kodda arama yapıldığında iletişim kutusu çıkmasını istemiyorsam ne yapmam lazım. Her sonraki aramaya iletişim kutusundaki evet komutu ile değil de CommondButton1 butonuna tekrar basılmasıyla devam etsin.

İkincisi ise aramamı 1 den fazla sütunda yapmak istersem veya sütunu sınırlandırmak istesem kodda nereyi değiştirmem lazım (Örneğin aramayı C:C21 ve B sütunlarında yapsın, C21 den sonraki verilerimi armaya dahil etmeyeyim)
 

balanar

Altın Üye
Katılım
22 Şubat 2021
Mesajlar
347
Excel Vers. ve Dili
Excel 2007
Altın Üyelik Bitiş Tarihi
09-03-2027
Kod:
onay = MsgBox("Tamam/Devam (Aramaya devam etmek için Evet'i seçiniz)", vbQuestion + vbYesNo, "Dikkat!")
            If onay = vbNo Then Exit Sub
Şu kısım kalkacak iletişim kutusu için ama, bir sonraki aşamayı yapamadım. Findnext'ide yazmış yusuf hocam ama. Tekrardan nasıl devam ettiririz iletişim kutusu çıkmadan ugrasıyorum henüz yapamadım
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Kod:
onay = MsgBox("Tamam/Devam (Aramaya devam etmek için Evet'i seçiniz)", vbQuestion + vbYesNo, "Dikkat!")
            If onay = vbNo Then Exit Sub
Şu kısım kalkacak iletişim kutusu için ama, bir sonraki aşamayı yapamadım. Findnext'ide yazmış yusuf hocam ama. Tekrardan nasıl devam ettiririz iletişim kutusu çıkmadan ugrasıyorum henüz yapamadım
Bu kodlar bana ait değil, ilk mesajda syın ogcln'nin paylaştığı kodlar, ben sadece uyarlama yapıyorum.

Teşekkür ederim elinize sağlık. Bu sefer çalıştı. 2 şey daha soracağım. İlki Bu kodda arama yapıldığında iletişim kutusu çıkmasını istemiyorsam ne yapmam lazım. Her sonraki aramaya iletişim kutusundaki evet komutu ile değil de CommondButton1 butonuna tekrar basılmasıyla devam etsin.

İkincisi ise aramamı 1 den fazla sütunda yapmak istersem veya sütunu sınırlandırmak istesem kodda nereyi değiştirmem lazım (Örneğin aramayı C:C21 ve B sütunlarında yapsın, C21 den sonraki verilerimi armaya dahil etmeyeyim)
Öncelikle bu kodlar bana ait değil. İlk mesajda sizin paylaştığınız kodlar ve tam olarak da ilk mesajda sizin istediğiniz işlemi yapıyorlar. Ben kodda bir değişikliik yapmadım, sadece kodu nasıl kullanmanız gerektiğini gösterdim.

Sizin düğme ve metin kutusuyla yapma isteğiniz için de #9 nolu mesajımda çözümü verdim.

"Bu sefer çalıştı" demeniz bu nedenle yanlış. Çünkü zaten önceki hali de çalışıyordu ve tam olarak ilk mesajdaki isteğinizi yapıyordu.

Son istekleriniz için aşağıdaki kodları deneyiniz:

PHP:
Private Sub CommandButton1_Click()
Dim c As Range, son As Integer

If TextBox1 = "" Then Exit Sub
son = Cells(Rows.Count, "B").End(3).Row

With Range("B1:B" & son, "C1:C21")
10:
Set c = .Find(TextBox1.Text, LookAt:=xlPart, After:=ActiveCell, MatchCase:=False, SearchDirection:=xlNext) ', SearchFormat:=False)
    If Not c Is Nothing Then
        If c.Column = 2 Then
            c.Select
        ElseIf c.Column = 3 And c.Row < 22 Then
            c.Select
        Else
            c.Offset(1, -1).Select
            GoTo 10
        End If
    End If
End With

Set c = Nothing
End Sub
 

oglcn

Altın Üye
Katılım
11 Haziran 2021
Mesajlar
28
Excel Vers. ve Dili
2016 tr
Altın Üyelik Bitiş Tarihi
11-12-2025
Bu kodlar bana ait değil, ilk mesajda syın ogcln'nin paylaştığı kodlar, ben sadece uyarlama yapıyorum.



Öncelikle bu kodlar bana ait değil. İlk mesajda sizin paylaştığınız kodlar ve tam olarak da ilk mesajda sizin istediğiniz işlemi yapıyorlar. Ben kodda bir değişikliik yapmadım, sadece kodu nasıl kullanmanız gerektiğini gösterdim.

Sizin düğme ve metin kutusuyla yapma isteğiniz için de #9 nolu mesajımda çözümü verdim.

"Bu sefer çalıştı" demeniz bu nedenle yanlış. Çünkü zaten önceki hali de çalışıyordu ve tam olarak ilk mesajdaki isteğinizi yapıyordu.

Son istekleriniz için aşağıdaki kodları deneyiniz:

PHP:
Private Sub CommandButton1_Click()
Dim c As Range, son As Integer

If TextBox1 = "" Then Exit Sub
son = Cells(Rows.Count, "B").End(3).Row

With Range("B1:B" & son, "C1:C21")
10:
Set c = .Find(TextBox1.Text, LookAt:=xlPart, After:=ActiveCell, MatchCase:=False, SearchDirection:=xlNext) ', SearchFormat:=False)
    If Not c Is Nothing Then
        If c.Column = 2 Then
            c.Select
        ElseIf c.Column = 3 And c.Row < 22 Then
            c.Select
        Else
            c.Offset(1, -1).Select
            GoTo 10
        End If
    End If
End With

Set c = Nothing
End Sub

Öncelikle teşekkürler. Bahsettiğim gibi oldu. iletişim kutusu da çıkmıyor. fakat 1-2 sefer çalıştırdıktan sonra şu hatayı vermeye başladı:

"Runtime Error-13 Type Missmatch"

ilgili hatayı şu satır için veriyor:

Set c = .Find(TextBox1.Text, LookAt:=xlPart, After:=ActiveCell, MatchCase:=False, SearchDirection:=xlNext) ', SearchFormat:=False)
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bu konuda yorumum yok maalesef.
 
Üst