2009-09-22 13 views
80

Jest to jedna z tych rzeczy, które na pewno mają wbudowaną funkcję (i mógłbym powiedzieć, że w przeszłości), ale podrapuję się głowa, aby to zapamiętać.Pętla w każdym wierszu zakresu w Excelu

Jak przechodzić między wierszami zakresu wielokolumnowego za pomocą arkusza Excel VBA? Wszystkie tutoriale Szukałam się wydawać tylko wspomnieć pracy poprzez szereg jednowymiarowej ...

Odpowiedz

114
Dim a As Range, b As Range 

Set a = Selection 

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

coś takiego:

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 
4

w pętlach, zawsze wolą używać Cells klasa, przy użyciu metody referencyjnej W1K1, tak:

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

to pozwala mi szybko i łatwo pętlę ponad Zakres komórek prościej:

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 
4

Właśnie natknęliśmy się na to i myślałem, że Zaproponuj rozwiązanie. Zazwyczaj lubię korzystać z wbudowanej funkcji przypisywania zakresu do tablicy wielościennej (myślę, że jest to również programista JS we mnie).

I często napisać kod tak:

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 

Przydzielanie zakresów do zmiennych jest bardzo skutecznym sposobem na manipulowanie danymi w VBA.

+0

Podoba mi się ten sposób najlepiej! – athos

+0

Dwie główne zalety: 1) metoda tablicy jest ** zawsze szybsza ** niż zapętlenie zakresu, 2) jest prosta i można jej użyć w ** w obu kierunkach ** i napisać tablicę po niektóre obliczenia: 'Zakres (" A1: D4 ") = myarray'. ** Uwaga: ** "Dim myarray" jako wariant; zwróć uwagę, że jest to tablica * 1based * 2dim domyślnie –

Powiązane problemy