Şartlı Düşeyara mümkün mü?

seddur

Altın Üye
Katılım
12 Nisan 2012
Mesajlar
531
Excel Vers. ve Dili
Microsoft office professional plus 2019
Altın Üyelik Bitiş Tarihi
18-12-2024
Merhabalar.Bugün düşeyara ile ilgili bilgi almak istiyorum.Bilindiği gibi düşeyara aranan değerin ilk bulunduğu satırdaki bilgileri gösteriyor.Ama daha alt satırlardaki "A" sutununda aynı "B" ve "C" sutunlarında farklı olan değerlere bakmak gerekirse düşeyara kullanılabilirmi.Ben bir kod yazdım ama tabiki çalıştıramadım,aşağıda paylaşıyorum.Eğer düşeyara mümkün değilse benzer herhangi bir yöntem var mıdır? Teşekkür Ediyorum.

isim = UserForm1.TextBox1.Value
Set s1 = Sheets("Kayıt")
For i = 2 To s1.[a65536].End(xlUp).Row
If s1.Cells(i, "a").Value = UserForm1.TextBox1.Text And s1.Cells(i, "b").Value = UserForm1.TextBox2.Text And s1.Cells(i, "c").Value = UserForm1.TextBox3.Text Then
TextBox12.Value = Application.WorksheetFunction.VLookup(isim, Sheets("Kayıt").Range("A2:M50000"), 4, 0)
End If
Next
 

seddur

Altın Üye
Katılım
12 Nisan 2012
Mesajlar
531
Excel Vers. ve Dili
Microsoft office professional plus 2019
Altın Üyelik Bitiş Tarihi
18-12-2024
Aşağıdaki şekilde yazınca düşeyaraya gerek kalmadan aynı sonucu veriyor..Düşeyara o kadar da kullanışlı değil gibi geldi bana.Neyse yeni başlayan arkadaşlar için bilgi olsun.
Set s1 = Sheets("Kayıt")
For i = 2 To s1.[a65536].End(xlUp).Row
If s1.Cells(i, "a").Value = TextBox1.Text And s1.Cells(i, "b").Value = TextBox2.Text And s1.Cells(i, "c").Value = TextBox3.Text Then
TextBox12.Value = s1.Cells(i, "d")
End If
Next
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,510
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Fonksiyonlar excel sayfasında olduğu gibi VBA tarafında da aynı mantıkla çalışmaktadır.

Bu sebeple yapmak istediğiniz işleme göre kodlama yapmanız uygun olacaktır.

Siz anladığım kadarıyla 3 koşulu sağlayan D sütunundaki değere ulaşmaya çalışıyorsunuz.

Bunun için sizin kullandığınız yöntem klasik döngü ile arama yöntemidir. Bu yöntem veri sayısı çoğaldıkça yavaş sonuç vermeye başlayacaktır. Döngüler kod yazmanın temelidir. Döngüleri en ince ayrıntısına kadar öğrenmenizi kesinlikle tavsiye ederim.

Bunun dışında işe biraz hız katmak isterseniz excel sayfalarında sıkça kullanılan CTRL+F (Bul) yöntemini tercih edebilirsiniz.

Bu işlemi VBA tarafında aşağıdaki teknikle yapabilirsiniz.

C++:
Option Explicit

Private Sub CommandButton1_Click()
    Dim S1 As Worksheet, Bul As Range, Adres As String
    
    Set S1 = Sheets("Sheet1")
    
    Set Bul = S1.Range("A:A").Find(TextBox1, , , xlWhole)
    If Not Bul Is Nothing Then
        Adres = Bul.Address
        Do
            If S1.Cells(Bul.Row, "B") = TextBox2 And S1.Cells(Bul.Row, "C") = TextBox3 Then
                TextBox12 = S1.Cells(Bul.Row, "D")
                Exit Do
            End If
            Set Bul = S1.Range("A:A").FindNext(Bul)
        Loop While Not Bul Is Nothing And Bul.Address <> Adres
    End If
End Sub

Bu yapı sadece aradığınız veriye odaklanacağı için döngüye göre biraz daha hızlı sonuç verecektir.

En hızlısı olsun derseniz aşağıdaki teknikleri araştırabilirsiniz.

Ado yöntemi
Array yöntemi
Scritpting.Dictionary Yöntemi
 
Üst