valor una rango posicion otra obtener indice funciones funcion fila devolver columna coincidir celda buscarv buscar excel vba excel-vba excel-2013

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.