seleccionar - Iterar a través de filas pobladas en Excel usando VBA
recorrer filas y columnas excel vba (3)
Así que estoy tratando de iterar a través de una hoja de trabajo en una hoja de cálculo de Excel usando VBA. Quiero iterar a través de cada fila, y luego a través de cada columna, ya pesar de buscar en Google, no puedo encontrar una manera intuitiva de hacerlo.
Supongo que la primera celda de una fila debe ser poblada, si no es así, entonces ese debe ser el final. Puedo hacer cumplir esto
Mi enfoque actual es recorrer las filas, luego intentar obtener el valor de la primera celda, pero no puedo resolverlo. He venido preguntas aquí y en otras partes sobre el uso de rangos y cosas así, pero nada que me ayude a escribir código.
El enfoque actual es:
Set sh = ActiveSheet
RowCount = 0
For Each rw In sh.Rows
''If Row.Cells(1, 1).Value = "" Then Exit For
RowCount = RowCount + 1
Next rw
MsgBox (RowCount)
Ahora cuando ejecuto esto, obtengo un gran número, lo que es incorrecto ya que la tabla solo tiene alrededor de 25 filas. Comenté la primera línea ya que no estaba funcionando.
¿Qué puedo cambiar en la primera línea de For Loop para romper correctamente cuando encuentra una fila donde la primera celda está vacía?
Para el beneficio de cualquiera que .UsedRange
similar, vea la hoja de trabajo .UsedRange
,
por ejemplo ? ActiveSheet.UsedRange.Rows.Count
? ActiveSheet.UsedRange.Rows.Count
y bucles como
For Each loopRow in Sheets(1).UsedRange.Rows: Print loopRow.Row: Next
Parece que acaba de codificar la fila y la columna; de lo contrario, un par de pequeños retoques, y creo que estás allí:
Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer
RowCount = 0
Set sh = ActiveSheet
For Each rw In sh.Rows
If sh.Cells(rw.Row, 1).Value = "" Then
Exit For
End If
RowCount = RowCount + 1
Next rw
MsgBox (RowCount)
Voy a hacer un par de suposiciones en mi respuesta. Supongo que sus datos comienzan en A1 y no hay celdas vacías en la primera columna de cada fila que tiene datos.
Este código:
- Encuentra la última fila en la columna A que tiene datos
- Pasa por cada fila
- Encuentre la última columna en la fila actual con datos
- Pasa por cada celda en la fila actual hasta la última columna encontrada.
Este no es un método rápido, pero se repetirá a través de cada uno de manera individual como lo sugirió es su intención.
Sub iterateThroughAll()
ScreenUpdating = False
Dim wks As Worksheet
Set wks = ActiveSheet
Dim rowRange As Range
Dim colRange As Range
Dim LastCol As Long
Dim LastRow As Long
LastRow = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row
Set rowRange = wks.Range("A1:A" & LastRow)
''Loop through each row
For Each rrow In rowRange
''Find Last column in current row
LastCol = wks.Cells(rrow, wks.Columns.Count).End(xlToLeft).Column
Set colRange = wks.Range(wks.Cells(rrow, 1), wks.Cells(rrow, LastCol))
''Loop through all cells in row up to last col
For Each cell In colRange
''Do something to each cell
Debug.Print (cell.Value)
Next cell
Next rrow
ScreenUpdating = True
End Sub