Değişen satır sayısına göre düşeyara

Gold_Savt

Altın Üye
Katılım
5 Mart 2010
Mesajlar
227
Excel Vers. ve Dili
Ofis 2010 TR 32 Bit
Altın Üyelik Bitiş Tarihi
01-02-2025
B sütunundaki değişen satır sayısına göre düşey ara makro uygulamak istiyorum ancak sürekli hata alıyorum. Yardımlarınızı bekliyorum.
Kodlarım şu şekilde
Kod:
Dim sonsatir As Integer
sonsatir = Sheets("Done").Range("B65000").End(xlUp).Row
For i = 1 To sonsatir
Sayfa2.Cells(i, "G") = WorksheetFunction.VLookup(Sayfa2.Cells(i, "F"), Sayfa2.Range("B2:D20"), 2, 0)
Sayfa2.Cells(i, "H") = WorksheetFunction.VLookup(Sayfa2.Cells(i, "F"), Sayfa2.Range("B2:D20"), 3, 0)
Next i ' döngü sonu
 

Ekli dosyalar

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,334
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
Sayfa2.Range("B2: D20") aralığında arama yaptığı için ilgili alanda olmayan verileri bulamadığı için hata veriyor. B: D yazarak deneyiniz.
 

Gold_Savt

Altın Üye
Katılım
5 Mart 2010
Mesajlar
227
Excel Vers. ve Dili
Ofis 2010 TR 32 Bit
Altın Üyelik Bitiş Tarihi
01-02-2025
Anladım hocam teşekkür ederim.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,334
Excel Vers. ve Dili
2007 Türkçe
Rica ederim,
Bu gibi durumlarda fonksiyonlar sonuç bulamadığında kodlarınızın hata vererek sonlanmasına neden olur. Bunun olmaması için veri varsa formülü çalıştır şeklinde bir sorgu oluşturabilirsiniz.
Mesela aşağıdaki örnekte EğerSay kullanılarak veri kontrolü yapılıyor.
Rich (BB code):
For i = 1 To sonsatir ' Alınacak veri sayısı kadar döngü (2 başlangıç satırı; 7 bitiş satırı)
    If WorksheetFunction.CountIf(Sayfa2.Range("B2:B20"), Sayfa2.Cells(i, "F")) > 0 Then
        Sayfa2.Cells(i, "G") = WorksheetFunction.VLookup(Sayfa2.Cells(i, "F"), Sayfa2.Range("B2:D20"), 2, 0)
        Sayfa2.Cells(i, "H") = WorksheetFunction.VLookup(Sayfa2.Cells(i, "F"), Sayfa2.Range("B2:D20"), 3, 0)
    End If
Next i ' döngü sonu
Alternatif olarak WorksheetFunction yerine Application yazarsanız formül hata verse de kodunuz hata vermeyecektir.
İyi çalışmalar...
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,370
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Alternatif olsun, VBA'nın kendi Find komutunu kullanarak

Kod:
Private Sub CommandButton1_Click()

Dim lRow As Long
Dim c As Range

For lRow = 1 To Sayfa2.Cells(Rows.Count, "F").End(3).Row
    Set c = Sayfa2.Range("B:B").Find(Sayfa2.Cells(lRow, "F"), LookIn:=xlValues, LookAt:=xlWhole)
    If Not c Is Nothing Then
        Sayfa2.Cells(lRow, "G") = c.Offset(0, 1)
        Sayfa2.Cells(lRow, "H") = c.Offset(0, 2)
    Else
        Sayfa2.Cells(lRow, "G") = ""
        Sayfa2.Cells(lRow, "H") = ""
    End If
Next lRow

End Sub
 

Gold_Savt

Altın Üye
Katılım
5 Mart 2010
Mesajlar
227
Excel Vers. ve Dili
Ofis 2010 TR 32 Bit
Altın Üyelik Bitiş Tarihi
01-02-2025
Ömer Bey, Necdet Bey teşekkür ediyorum. Düşeyarada karşılığı olsa da olmasa da işleyişte sistem hata vermiyor. Tekrar teşekkür ediyorum.
 
Üst