rango - obtener fila y columna de una celda excel
Encuentra la última fila no vacía en un rango de celdas con una fórmula (3)
¿Cómo puedo encontrar la última fila en un rango de celdas que contienen una fórmula, donde el resultado de la fórmula es un valor real y no está vacío?
Diga de forma simplificada que el rango de celdas ("E1:E10")
contiene una fórmula que hace referencia a las celdas A1 a A10 como sigue =IF("A1"="","","A1")
. Pero solo las celdas A1 a A6 tienen un valor relleno, por lo que el resultado de la fórmula para las celdas E7 a E10 estará vacío.
Intentando hacerlo con:
lastRow = ActiveSheet.Range("E" & Rows.Count).End(xlUp).Row
los resultados en lastRow tienen el valor de 10
. Lo que quiero es que el valor de lastRow sea 6
en este ejemplo.
El código real es mucho más complejo que esto, así que no puedo simplemente verificar la última fila llena de la Columna A, ya que las fórmulas se refieren a celdas individuales en diferentes hojas y se agregan dinámicamente.
Creo que una forma más elegante que la proporcionada por @D_Bester
es usar la opción find()
sin recorrer el rango de celdas:
Sub test()
Dim cl As Range, i&
Set cl = Range("E1:E" & Cells(Rows.Count, "E").End(xlUp).Row)
i = cl.Find("*", , xlValues, , xlByRows, xlPrevious).Row
Debug.Print "Last row with data: " & i
End Sub
prueba
Además, la versión más corta del código que se proporcionó anteriormente es:
Sub test2()
Debug.Print [E:E].Find("*", , xlValues, , xlByRows, xlPrevious).Row
End Sub
Desea encontrar la última celda en una columna que no está vacía Y no es una cadena en blanco ("").
Simplemente siga el LastRow con un bucle de comprobación de una celda no en blanco.
lastrow = ActiveSheet.Range("E" & ActiveSheet.Rows.Count).End(xlUp).Row
Do
If ActiveSheet.Cells(lastrow, 5).Value <> "" Then
Exit Do
End If
lastrow = lastrow - 1
Loop While lastrow > 0
If lastrow > 0 Then
Debug.Print "Last row with data: " & lastrow
Else
Debug.Print "No data in the column"
End If
Tenga en cuenta que su Rows.count
no especifica qué hoja. Eso significa que usará la hoja activa. Por supuesto, ActiveSheet.Range()
también está en la hoja activa. Pero es una mala práctica mezclar Range
o Rows
con .Range
o .Rows
. Indica un uso irreflexivo que podría morderlo si cambió la ActiveSheet
pero no modificó la referencia no especificada.
Esto debería ayudarlo a determinar la última fila que contiene una fórmula (en la columna A
en la hoja 1 Sheet1
):
lastRow = Split(Split(Sheet1.Range("A:A").SpecialCells(xlCellTypeFormulas).Address, ",")(UBound(Split(Sheet1.Range("A:A").SpecialCells(xlCellTypeFormulas).Address, ","))), "$")(2)
SpecialCells
se usa para determinar el rango de todas las celdas que contienen una fórmula. Este rango luego se analiza usando Split
. Con Ubound
la última de estas celdas se está recuperando. El resultado se divide de nuevo para extraer el número de fila.