Soru VBA Vlookup ile Sonuç birleştirme

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Üstadlar; Aşağıdaki kod ile düşeyara komutunun KAYITLAR sekmesinde farklı sütunlarındaki verilerini birleştirmek istiyorum ancak olmuyor. Nerede hata yapıyorum. Bir çok şey denedim çözemedim.
Kod:
Dim S1 As Worksheet
    Dim S2 As Worksheet
    Set S1 = Sheets("Veriler")
    Set S2 = Sheets("Kayıtlar")
    
    son = Cells(Rows.Count, "C").End(3).Row
    
    For i = 2 To son
        
        S1.Cells(i, "Q") = Application.VLookup(S1.Cells(i, "C"), S2.Range("A:E"), 3, 0) & Application.VLookup(S1.Cells(i, "C"), S2.Range("A:E"), 4, 0)
        
    Next i
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,032
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ne gibi bir sorun yaşıyorsunuz?
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Bu Satırda TYPE MISMATCH hatası alıyorum. Amacım C ve D sütunundaki karşılıklarını birleştirip yazdırmak @Korhan Ayhan hocam

S1.Cells(i, "Q") = Application.VLookup(S1.Cells(i, "C"), S2.Range("A:E"), 3, 0) & Application.VLookup(S1.Cells(i, "C"), S2.Range("A:E"), 4, 0)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,032
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Dosyanızı paylaşınız.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@Korhan Ayhan hocam buyrun. Dosyamı sadeleştirdim sizin için.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,032
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
VLOOKUP fonksiyonu nasıl excel sayfasında kullandığınızda YOK hatası veriyorsa VBA tarafında da durum aynıdır. En son satırdaki veriniz bulunamadığı için hata veriyor.

Durumu aşmak için FIND komutu ile ya da COUNTIF ile veriyi saydırarak işlem yapılabilir.

FIND ile örnek kullanım;

C++:
Sub Sorgu()
    Application.ScreenUpdating = False

    Dim S1 As Worksheet
    Dim S2 As Worksheet
    Dim Bul As Range
    
    Set S1 = Sheets("Veriler")
    Set S2 = Sheets("Kayıtlar")
    
    Son = Cells(Rows.Count, "C").End(3).Row
    
    For i = 2 To Son
        Set Bul = S2.Range("A:A").Find(S1.Cells(i, "C"), , , xlWhole)
        If Not Bul Is Nothing Then
            S1.Cells(i, "Q") = Application.VLookup(S1.Cells(i, "C"), S2.Range("A:E"), 3, 0) & Application.VLookup(S1.Cells(i, "C"), S2.Range("A:E"), 4, 0)
        End If
    Next i
   
    Application.ScreenUpdating = True
End Sub
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Çok teşekkür ederim @Korhan Ayhan hocam ellerinize sağlık :) Büyük bir dertten kurtardınız.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
@Korhan Ayhan hocam yalnız bir şey fark ettim şimdi. Fiş numarasının yazdığı C:C sütununda satırlarda boşluk olursa yine aynı hatayı veriyor. IIf(IsError kullanarak aşmaya çalıştım ancak olmadı. Nasıl çözüm sağlarız?
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Birde metinde tarihe çevirme sıkıntısı yaşıyorum. Fark etmişsinizdir.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,032
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ben ne birleştirdiğinize bakmamıştım. Sadece kodda ki sorunu düzelttim.

Tarihlerde özünde birer sayıdır. Sadece görsel olarak bizler 01.01.2020 gibi görürüz. Hücre biçimlendirme yapmadığınız sürece hücrede sayısal karşılığını görürüz. VBA tarafında da durum aynıdır.

Kodu aşağıdaki gibi revize edersek hem boş hücreler hem biçimlendirme kısmı çözülmüş olur.

C++:
Sub Sorgu()
    Application.ScreenUpdating = False

    Dim S1 As Worksheet
    Dim S2 As Worksheet
    Dim Bul As Range
    
    Set S1 = Sheets("Veriler")
    Set S2 = Sheets("Kayıtlar")
    
    Son = Cells(Rows.Count, "C").End(3).Row
    
    S1.Range("Q2:Q" & S1.Rows.Count).ClearContents
    
    For i = 2 To Son
        If S1.Cells(i, "C") <> "" Then
            Set Bul = S2.Range("A:A").Find(S1.Cells(i, "C"), , , xlWhole)
            If Not Bul Is Nothing Then
                S1.Cells(i, "Q") = Application.VLookup(S1.Cells(i, "C"), S2.Range("A:E"), 3, 0) & "-" & Format(Application.VLookup(S1.Cells(i, "C"), S2.Range("A:E"), 4, 0), "dd.mm.yyyy")
            End If
        End If
    Next i
   
    Application.ScreenUpdating = True
End Sub
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Altın Üyelik Bitiş Tarihi
01-02-2027
Harikasınız çok teşekkür ederim :)
 
Üst