2009-09-22 13 views
80

Dies ist eines der Dinge, die ich sicher bin, dass es eine eingebaute Funktion für (und ich habe es vielleicht in der Vergangenheit gesagt worden), aber ich kratze meine Kopf, um sich daran zu erinnern.Schleife durch jede Zeile eines Bereichs in Excel

Wie durchlaufen Sie jede Zeile eines mehrspaltigen Bereichs mit Excel VBA? Alle Tutorials Ich habe scheinen gesucht nach oben nur durch einen eindimensionalen Bereich zu erwähnen arbeiten ...

Antwort

114
Dim a As Range, b As Range 

Set a = Selection 

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

Etwas wie folgt aus:

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

In Loops, ziehe ich immer die Verwendung Cells Klasse, mit dem R1C1 Referenzmethode, wie folgt aus:

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

Dies erlaubt mir, schnell und einfach Schleife über ein Bereich von Zellen leicht:

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

stolperte über diese und dachte, ich würde meine Lösung vorschlagen. Normalerweise verwende ich die eingebaute Funktionalität, um einem multi-dim-Array einen Bereich zuzuweisen (ich denke, es ist auch der JS Programmer in mir).

Ich schreibe oft Code wie folgt:

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 

Bereiche Variablen Zuordnung ist eine sehr leistungsfähige Methode, Daten in VBA zu manipulieren.

+0

ich mag diesen Weg am besten! – athos

+0

Zwei Hauptvorteile, um es zu bevorzugen: 1) die Array - Methode ist ** immer schneller ** als das Durchlaufen eines Bereichs, 2) es ist einfach und Sie können es in ** beide Richtungen ** verwenden und schreiben das Array danach zurück einige Berechnungen: 'Bereich (" A1: D4 ") = myarray'. ** Hinweis: ** "Dim myarray" als Variante; Achten Sie darauf, dass es standardmäßig ein * 1based * 2dim Array ist –

Verwandte Themen