Aktarma Kodlarındaki İşlev Farklılığı

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
950
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Aşağıdaki kod aralığının ilki ile bir sayfadan diğer sayfaya "R" sütununda "KAPALI" yazan hücrelere bakarak kapalı yazan satırları diğer sayfaya sırasıyla aktarıyorum.

İkinci kod aralığında ise s1.Range("A65536").End(3).Row yerine sonsat1 , s2.Range("A65536").End(3).Row yerine sonsat2 tanımlamalarını kullandım. Bu durumda aktarılan satır tek satır olarak görünüyor. Döngüye giren veriler sürekli üst üste yazmış oluyor.

İki kodun farklı çalışmasının sebebi nedir???

Kod:
Sub AKTAR()
'Application.ScreenUpdating = False

'**************** AKTARIM KODLARI **************
Dim s1 As Worksheet
Dim s2 As Worksheet
Dim sonsat1 As Long
Dim sonsat2 As Long

Dim i As Integer
Dim k As Integer


Set s1 = Sheets("VERİ")
Set s2 = Sheets("KAPANAN_SİPARİŞLER")

sonsat1 = s1.Range("A65536").End(3).Row
sonsat2 = s2.Range("A65536").End(3).Row


For i = 2 To s1.Range("A65536").End(3).Row

    satir = s2.Range("A65536").End(3).Row + 1
   

   
    If UCase(Replace(Replace(s1.Range("R" & i), "ı", "I"), "i", "İ")) = "KAPALI" Then
    For k = 1 To 26
    s2.Cells(satir, k) = s1.Cells(i, k)
    Next k
    End If
   
Next i

'Application.ScreenUpdating = False

End Sub


Kod:
Sub AKTAR_2()
'Application.ScreenUpdating = False

'**************** AKTARIM KODLARI **************
Dim s1 As Worksheet
Dim s2 As Worksheet
Dim sonsat1 As Long
Dim sonsat2 As Long

Dim i As Integer
Dim k As Integer


Set s1 = Sheets("VERİ")
Set s2 = Sheets("KAPANAN_SİPARİŞLER")

sonsat1 = s1.Range("A65536").End(3).Row
sonsat2 = s2.Range("A65536").End(3).Row


For i = 2 To sonsat1

    satir = sonsat2 + 1
   

   
    If s1.Cells(i, "R") = "KAPALI" Then
    For k = 1 To 26
    s2.Cells(satir, k) = s1.Cells(i, k)   
    Next k
    End If
   
   


Next i
End Sub
 

DoğanD

Altın Üye
Katılım
22 Eylül 2023
Mesajlar
479
Excel Vers. ve Dili
Office 365 TR
Altın Üyelik Bitiş Tarihi
05-10-2028
Merhaba,

2. kod bloğunda sonsat2 değişkeni atamasını for - next döngüsü dışında yaparak sabitliyorsunuz. Kod tekrar atama yapılan satıra çıkmadığı için de hemen önceki satırda hangi değeri aldıysa o değer üzerinden devam ediyor. 1. blokta döngü içerisinde güncellediğiniz için problem olmuyor. 2. blokta Next k ifadesi öncesinde satir = satir +1 gibi bir ifade ekleyerek çalışmasını sağlayabilirsiniz.

1. Blok
For i = 2 To s1.Range("A65536").End(3).Row
satir = s2.Range("A65536").End(3).Row + 1

2. Blok
sonsat2 = s2.Range("A65536").End(3).Row
For i = 2 To sonsat1
satir = sonsat2 + 1
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
950
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Teşekkürler Syn @DoğanD , daha önce de buna benzer bir döngü sorusunu cevaplamıştınız. Konuyu şimdi anlayabildim.
 
Son düzenleme:
Üst