Excel'de bir aralığın her satırında döngü yapın


117

Bu, yerleşik bir işlevi olduğundan emin olduğum şeylerden biri (ve geçmişte de bana anlatılmış olabilir), ama hatırlamak için kafamı kaşıyıyorum.

Excel VBA kullanarak çok sütunlu bir aralığın her satırında nasıl döngü yapabilirim? Araştırdığım tüm öğreticiler, yalnızca tek boyutlu bir aralıkta çalışmayı belirtiyor gibi görünüyor ...


Yanıtlar:


151
Dim a As Range, b As Range

Set a = Selection

For Each b In a.Rows
    MsgBox b.Address
Next

149

Bunun gibi bir şey:

Dim rng As Range
Dim row As Range
Dim cell As Range

Set rng = Range("A1:C2")

For Each row In rng.Rows
  For Each cell in row.Cells
    'Do Something
  Next cell
Next row

8

Sadece buna tökezledim ve çözümümü önereceğimi düşündüm. Tipik olarak, çok karartmalı bir diziye bir aralık atamak için yerleşik işlevselliği kullanmaktan hoşlanırım (sanırım bu aynı zamanda içimdeki JS Programcısı).

Sık sık şöyle kod yazıyorum:

Sub arrayBuilder()

myarray = Range("A1:D4")

'unlike most VBA Arrays, this array doesn't need to be declared and will be automatically dimensioned

For i = 1 To UBound(myarray)

    For j = 1 To UBound(myarray, 2)

    Debug.Print (myarray(i, j))

    Next j

Next i

End Sub

Değişkenlere aralık atamak, VBA'daki verileri işlemek için çok güçlü bir yoldur.


en çok bu yolu seviyorum!
athos

2
İki ana avantajları bunu lehine: 1) dizi yöntemidir hep daha hızlı şey bu kadar basit ve bunu kullanabilir, 2) bir dizi içinde döngü daha iki yönde ve bazı hesaplamaların ardından dizi geri yazın: Range("A1:D4") = myarray. Not: Dim myarray değişken olarak; bunun varsayılan olarak 1 tabanlı 2 boyutlu bir dizi olmasına dikkat edin
TM

7

Döngülerde, her zaman CellsR1C1 referans yöntemini kullanarak sınıfı kullanmayı tercih ederim, şöyle :

Cells(rr, col).Formula = ...

Bu hızlı ve kolay bana izin verir döngü aşkın Range kolayca hücrelerin:

Dim r As Long
Dim c As Long

c = GetTargetColumn() ' Or you could just set this manually, like: c = 1

With Sheet1 ' <-- You should always qualify a range with a sheet!

    For r = 1 To 10 ' Or 1 To (Ubound(MyListOfStuff) + 1)

        ' Here we're looping over all the cells in rows 1 to 10, in Column "c"
        .Cells(r, c).Value = MyListOfStuff(r)

        '---- or ----

        '...to easily copy from one place to another (even with an offset of rows and columns)
        .Cells(r, c).Value = Sheet2.Cells(r + 3, 17).Value


    Next r

End With
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.