• DİKKAT

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

For next döngüsündeki hata

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,891
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Merhaba.
Forumdaki bir soruya istinaden döngüde aklıma takılan birşey var.

Kodları F8 ile adımlayarak çalıştırdığımda.
İ nin 2. dönüşünde A sütununa hatalı rakam getiriyor.
6 rakamı gelmesi gerekirken, 7 geliyor.

Kod:
Sub k()

Rows(2).Clear

For i = 2 To 10

For a = 1 To 10 Step 2

Cells(2, a) = Sayfa2.Range("a" & i)
i = i + 1

Next a: Next i

End Sub

. . .
 

Ekli dosyalar

Merhaba
ilk i=2 olarak for a next a döngüsüne giriyor
a döngüde sırasıyla 1-3-5-7-9 oluyor
i de 2 ile girip ----- 3-4-5-6-7 ile çıkıyor next a yı geçip next i ye gelince 8 oluyor ikinci for a döngüsüne 8 ile giriyor
sonuç normal
Kod:
Sub k()
Rows(2).Clear
For i = 2 To 10
 For a = 1 To 10 Step 2
     Cells(2, a) = Sayfa2.Range("a" & i)
     i = i + 1
Cells(10 + i, "A") = a & "--" & i
  Next a:
Next i
Cells(i, "b") = a & "--" & i
End Sub
1--3
3--4
5--5
7--6
9--7

1--9
3--10
5--11
7--12
9--13

next i de 14 olarak çıkıyor
 
Son düzenleme:
. . .

1-2-3-4-5
7-8-9-10-11 olarak sonuç çıkarıyor. 6 yı atlıyor.

. . .
 
Açıklamamı düzelttim
Tekrar yukarıdaki açıklamamı okur musunuz?


sizin çalışmada next i den önce
i=i-1
eklenince sorun çözülüyor galiba
Kod:
Sub k()
Rows(2).Clear
For i = 2 To 10
 For a = 1 To 10 Step 2
     Cells(2, a) = Sayfa2.Range("a" & i)
     i = i + 1
Cells(10 + i, "A") = a & "--" & i 'KONTROL SATIRI
  Next a
  i = i - 1
Next i
Cells(i, "b") = a & "--" & i 'KONTROL SATIRI
End Sub

a--i.........11--12
1--3
3--4
5--5
7--6
9--7
1--8
3--9
5--10
7--11
9--12
 

Ekli dosyalar

Son düzenleme:
Merhaba,

Bence kodları bir kenara bırakınız da ne yapmak istiyorsunuz onu anlatın.

O zaman kodlar hakkında yorum yapmak daha doğru olur.

Kodların doğru mu yanlış mı olduğunu bilmiyoruz çünkü ne yapmak istediğinizi bilmiyoruz.
 
Alternatif olsun.

Kod:
Sub k()
i = 1
Rows(2).Clear
For b = 1 To 2 [COLOR="SeaGreen"]'2.satırda kaç döngü yapılacaksa[/COLOR]
For a = 1 To 10 Step 2 [COLOR="SeaGreen"]'2.satırda kaç sütun var ise (Sütun sayısı x 2)[/COLOR]
i = i + 1
Cells(2, a) = Sheets(2).Range("a" & i)
Next: Next
End Sub

Not = Sizin vermiş olduğunuz kodlarda i'nin değeri 6'yı döndürmeden 7'ye geçmektedir.
 
Merhaba,
Bence kodları bir kenara bırakınız da ne yapmak istiyorsunuz onu anlatın.
O zaman kodlar hakkında yorum yapmak daha doğru olur.
Kodların doğru mu yanlış mı olduğunu bilmiyoruz çünkü ne yapmak istediğinizi bilmiyoruz.
. . .

Sayfa2 A sütunundaki verileri.
Sayfa1 2.satıra 5 sütuna, birer sütun arayla aktarmaya çalışıyorum.

Kodlamada sıkıntı yok. Kırmızı ile belirttiğim yeri yazınca 6 geliyor.
Ancak for i=2 to 10 step 5 olması gerekmiyor mu ?
İ ye a dönüşlerinde +1 yaptırıyorum ama for i ye gelince 3 olması gerekmiyor mu ?

Kod:
Sub k()
Rows(2).Clear
For i = 2 To 10
For a = 1 To 10 Step 2
Cells(2, a) = Sayfa2.Range("a" & i)
i = i + 1
Next a 
[B][COLOR="Red"]i=i-1[/COLOR][/B]
Next i
End Sub

. . .
 
Son düzenleme:
Merhaba
inceleyin
eğer i yi a döngüsünden sonra kendi döngüsünde normal devam etmesini istiyorsanız , a döngüsü kadar 1 to 10 step2 (5 döngü) i den çıkarmak gerekiyor.
i=i-5
Kod:
Sub fori()
Rows(2).Clear
For i = 2 To 10

Cells(3, "A") = "Şu an  i=" & i & " ---" & "X=" & a 'KONTROL
Application.Wait Time + TimeSerial(0, 0, 2)
For a = 1 To 10 Step 2
Cells(3, "A") = "Şu an  i=" & i & " ---" & "X=" & a 'KONTROL
Application.Wait Time + TimeSerial(0, 0, 2)

Cells(2, a) = Sayfa2.Range("a" & i)
i = i + 1

Cells(3, "A") = "Şu an  i=" & i & " ---" & "X=" & a 'KONTROL
Application.Wait Time + TimeSerial(0, 0, 2)
Next a

Cells(3, "A") = "DİKKAT  i=" & i & " ---" & "X=" & a 'KONTROL
Application.Wait Time + TimeSerial(0, 0, 2)
i = i - 1

Cells(3, "A") = "Şu an  i=" & i & " ---" & "X=" & a 'KONTROL
Application.Wait Time + TimeSerial(0, 0, 2)
Next i


Cells(3, "A") = "Şu an  i=" & i & " ---" & "X=" & x 'KONTROL
Application.Wait Time + TimeSerial(0, 0, 2)
End Sub
 
Son düzenleme:
Merhaba,

Aşağıdaki kodları deneyiniz.

Kod:
Sub k()
 
    Dim i   As Long, _
        j   As Long, _
        k   As Integer, _
        Sh1 As Worksheet, _
        Sh2 As Worksheet
 
    Set Sh1 = Sheets("Sayfa1")
    Set Sh2 = Sheets("Sayfa2")
    k = 2
 
    For i = 2 To Sh2.Cells(Rows.Count, "A").End(3).Row
        For j = 1 To 10 Step 2
            Sh1.Cells(k, j) = Sh2.Cells(i, "A")
            i = i + 1
        Next j
        i = i - 1
        k = k + 1
    Next i
 
End Sub

Bir başka döngü

Kod:
Sub Listele()
 
    Dim Sh1 As Worksheet, _
        Sh2 As Worksheet, _
        i   As Long, _
        j   As Long, _
        k   As Integer
    
    Set Sh1 = Sheets("Sayfa1")
    Set Sh2 = Sheets("Sayfa2")
    i = Sh1.Cells.Find("*", , , , xlByRows, xlPrevious).Row
    If i < 2 Then i = 2
    j = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
    
    Sh1.Range(Cells(2, "A"), Cells(i, j)).ClearContents
    
    i = 1
    j = 2
    
    Do Until Sh2.Cells(i, "A") = ""
        For k = 1 To 10 Step 2
            i = i + 1
            Sh1.Cells(j, k) = Sh2.Cells(i, "A")
        Next k
        j = j + 1
    Loop
    
End Sub
 
İ ye a dönüşlerinde +1 yaptırıyorum ama for i ye gelince 3 olması gerekmiyor mu ?

Hayır gerekmiyor. Sizin For i diyerek belirlediğiniz değişken ile, aşağıda i = i + 1 dediğiniz i değişkeni arasında fark yoktur. Her ikiside i değişkenidir. Siz For i 'den sonra i 'nin değerini döngüye bırakmayıp, el ile müdahele ediyorsunuz.

Bu arada bizim eklediğimiz kodları da incelediniz mi acaba ?

Farketti iseniz, i değişkenini ayırdık. Böylece kodlamada i'nin nerede hangi değeri aldığını takip etmek zorunda kalmadık.
 
Geri
Üst