Ulangi setiap baris rentang di Excel

117

Ini adalah salah satu hal yang saya yakin ada fungsi bawaannya (dan saya mungkin pernah diberitahu di masa lalu), tetapi saya menggaruk-garuk kepala untuk mengingatnya.

Bagaimana cara mengulang setiap baris rentang multi-kolom menggunakan Excel VBA? Semua tutorial yang saya cari sepertinya hanya menyebutkan bekerja melalui rentang satu dimensi ...

Margaret
sumber

Jawaban:

151
Dim a As Range, b As Range

Set a = Selection

For Each b In a.Rows
    MsgBox b.Address
Next
Mike
sumber
149

Sesuatu seperti ini:

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
David Andres
sumber
8

Baru saja tersandung pada ini dan berpikir saya akan menyarankan solusi saya. Saya biasanya suka menggunakan fungsionalitas bawaan untuk menetapkan rentang ke array multi-redup (saya kira itu juga Programmer JS dalam diri saya).

Saya sering menulis kode seperti ini:

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

Menetapkan rentang ke variabel adalah cara yang sangat ampuh untuk memanipulasi data di VBA.

tc_NYC
sumber
Saya paling suka cara ini!
athos
2
Dua keuntungan utama untuk mendukung itu: 1) metode array selalu lebih cepat daripada perulangan melalui suatu range, 2) itu sederhana dan Anda dapat menggunakannya di kedua arah dan menulis kembali array yang setelah beberapa perhitungan: Range("A1:D4") = myarray. Catatan: Dim myarray sebagai varian; perhatikan fakta bahwa ini adalah array 2dim berbasis 1 secara default
TM
7

Di Loops, saya selalu lebih suka menggunakan Cellskelas, menggunakan metode referensi R1C1, seperti ini:

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

Ini memungkinkan saya untuk dengan cepat dan mudah melakukan loop pada Rentang sel dengan mudah:

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
LimaNightHawk
sumber