tipos - que es un rango de celdas en excel
Pasa por cada fila de un rango en Excel (4)
Esta es una de esas cosas para las que estoy seguro de que hay una función incorporada (y es posible que me lo hayan dicho en el pasado), pero me estoy rascando la cabeza al recordarlo.
¿Cómo recorro cada fila de un rango de varias columnas con Excel VBA? Todos los tutoriales que he estado buscando parecen solo mencionar trabajar en un rango unidimensional ...
Acabo de tropezar con esto y pensé que sugeriría 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í).
Con frecuencia escribo 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 de manipular datos en VBA.
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
En Loops, siempre prefiero usar la clase Cells
, usando el método de referencia R1C1, así:
Cells(rr, col).Formula = ...
Esto me permite pasar rápida y fácilmente por un rango de celdas 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
Dim a As Range, b As Range
Set a = Selection
For Each b In a.Rows
MsgBox b.Address
Next