2009-09-22 11 views
80

Esta es una de esas cosas para las que estoy seguro de que hay una función integrada (y es posible que me lo hayan dicho en el pasado), pero me estoy rascando cabeza para recordarlo.Pasa por cada fila de un rango en Excel

¿Cómo recorro cada fila de un rango de varias columnas con Excel VBA? Todos los tutoriales que he estado buscando hasta parecen sólo para mencionar a trabajar a través de una serie unidimensional ...

Respuesta

114
Dim a As Range, b As Range 

Set a = Selection 

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

Algo como esto:

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

En Loops, siempre prefieren utilizar el Cells clase, utilizando el método de referencia R1C1, así:

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

esto me permite rápida y fácilmente bucle sobre una Rango de células fácilmente:

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

tropecé con esto y pensaba que iba a sugerir mi solución. Normalmente me gusta usar la funcionalidad incorporada de asignar un rango a una matriz multidim (creo que también es el programador JS en mí).

Me suelo escribir código como este:

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 

Asignar rangos a variables es una forma muy poderosa para manipular datos en VBA.

+0

¡me gusta así! – athos

+0

Dos ventajas principales para favorecerlo: 1) el método de matriz es ** siempre más rápido ** que el bucle a través de un rango, 2) es simple y puede usarlo en ** ambas direcciones ** y escribir la matriz de nuevo después algunos cálculos: 'Rango (" A1: D4 ") = myarray'. ** Nota: ** 'Dim myarray' como variante; preste atención al hecho de que es una matriz * 1 basada * 2dim por defecto –

Cuestiones relacionadas