"Her İçin... Excel'de Next" döngüsü

Özet

Excel'in Microsoft Excel 2002 ve sonraki sürümleri, "Her biri için... Next" döngüsü, Microsoft Excel 97'den ve Excel'in önceki sürümlerinden farklı bir şekilde çalışır.

Bu makalede farklar açıklanır ve döngüdeki hücrelerin nasıl silindiğini gösteren Visual Basic for Applications bir makro örneği sağlanır.

Daha fazla bilgi

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna zımni garantiler, satılabilirlik veya belirli bir amaca uygunluk da dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri belirli bir yordamın işlevselliğini açıklamaya yardımcı olabilir. Ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmeyeceklerdir.

Örnek veriler

Bu makaledeki makroyu kullanmak için çalışma sayfasına aşağıdaki örnek verileri yazın:

A1: a B1: 1
A2: b B2: 2
A3: x B3: 3
A4: x B4: 4
A5: c B5: 5
A6: x B6: 6
A7: d B7: 7
A8: x B8: 8
A9: x B9: 9
A10: e B10: 10

Örnek makro

Yeni bir makro modülünde aşağıdaki makroyu yazın.

Sub DeleteCells()

     'Loop through cells A1:A10 and delete cells that contain an "x."
     For Each c in Range("A1:A10")
        If c = "x" Then c.EntireRow.Delete
    Next

End Sub

Excel 2002'de ve Excel'in sonraki sürümlerinde örnek makronun davranışı

Excel 2002'de ve Excel'in sonraki sürümlerinde DeleteCells makrosunu çalıştırdığınızda yalnızca 3, 6 ve 8 satırları silinir. 4 ve 9. satırlar A sütununda "x" içerse de, makro satırları silmez. Makronun sonuçları aşağıdaki gibidir:

A1: a B1: 1
A2: b B2: 2
A3: x B3: 4
A4: c B4: 5
A5: d B5: 7
A6: x B6: 9
A7: e B7: 10

Microsoft Excel 3. satırı sildiğinde, tüm hücreler bir satır yukarı taşınır. Örneğin, A3 hücresi A4 hücresinin içeriğini varsayar, A4 hücresi A5 hücresinin içeriğini varsayar vb. Her İçin'in ardından... Sonraki döngü bir hücreyi değerlendirir, sonraki hücreyi değerlendirir; bu nedenle, hücreler kaydırıldığında döngü tarafından atlanabilir.

Microsoft Excel 5.0 ve Microsoft Excel 7.0'da örnek makronun davranışı

Excel 5.0 ve Excel 7.0'da DeleteCells makrosunu çalıştırdığınızda, makro "x" içeren tüm satırları siler. Makronun sonuçları aşağıdaki gibidir:

A1: a B1: 1
A2: b B2: 2
A3: c B3: 5
A4: d B4: 7
A5: e B5: 10

3. satır silindiğinde, tüm hücreler bir satır yukarı taşınır. Ardından, A3 hücresi A4 hücresinin içeriğini varsayar, A4 hücresi A5 hücresinin içeriğini varsayar ve bu şekilde devam eder.

Ancak, Döngünün Excel 2002'deki ve Excel'in sonraki sürümlerindeki davranışından farklı olarak, "Her biri için... Sonraki" döngüsü Excel 5.0'daki bir hücreyi değerlendirir ve Excel 7.0'da döngü, döngüde silinirse hücreyi yeniden değerlendirir. Bu nedenle, hücreler atlanmaz.

Hücreleri silmek için döngü kullanmak istediğinizde aşağıdaki makroyu kullanın:

Sub DeleteCells2()

     Dim rng As Range
     Dim i As Integer, counter As Integer
    
     'Set the range to evaluate to rng.
     Set rng = Range("A1:A10")
    
     'initialize i to 1
     i = 1
    
     'Loop for a count of 1 to the number of rows
     'in the range that you want to evaluate.
     For counter = 1 To rng.Rows.Count
    
          'If cell i in the range contains an "x",
           'delete the row.
           'Else increment i
            If rng.Cells(i) = "x" Then
                rng.Cells(i).EntireRow.Delete
            Else
                i = i + 1
            End If
    
     Next

End Sub

Excel'in tüm sürümlerinde bu makronun sonuçları aşağıdaki gibidir:

A1: a B1: 1
A2: b B2: 2
A3: c B3: 5
A4: d B4: 7
A5: e B5: 10

Hücreleri silmek için döngü kullanmak için ek yöntem

Bu, yukarıda gösterilen yöntemin alternatif bir yöntemidir. Bu yöntem aynı sonuçları üretir.

 Sub DeleteCells3()

     Dim rng As Range, i As Integer

     'Set the range to evaluate to rng.
     Set rng = Range("A1:A10")

     'Loop backwards through the rows
     'in the range that you want to evaluate.
     For i = rng.Rows.Count To 1 Step -1
    
             'If cell i in the range contains an "x", delete the entire row.
             If rng.Cells(i).Value = "x" Then rng.Cells(i).EntireRow.Delete
     Next

End Sub