• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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
Ü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
 
Ne gibi bir sorun yaşıyorsunuz?
 
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)
 
Dosyanızı paylaşınız.
 
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
 
Çok teşekkür ederim @Korhan Ayhan hocam ellerinize sağlık :) Büyük bir dertten kurtardınız.
 
@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?
 
Birde metinde tarihe çevirme sıkıntısı yaşıyorum. Fark etmişsinizdir.
 
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
 
Harikasınız çok teşekkür ederim :)
 
Geri
Üst