A HeRo's Notes

Notas de Andrew Hernández Romanos

viernes, 29 de junio de 2018

Excel: Como encontrar la última fila y la última columna

.on('click')

Muchas veces necesitamos encontrar la primera Fila con datos: para ello hay varios recursos en internet (especialmente en inglés) y de ahí se pueden hacer muchas cosas útiles como trabajar los datos de las filas hacia arriba de la última.

Las dificultades empiezan a aparecer cuando se tienen datos irregulares (como en la imagen en donde hay columnas y filas vacías) y se requiere encontrar la posición de la esquina inferior derecha de selección que contenga todos los datos, en nuestra imagen sería J25 (J es la columna 10).

Fuente propia

Después de una búsqueda breve en Google (En Inglés y Español) no pude hallar nada que me sirviera pues todo estaba hecho para datos compactos, con esto me refiero tablas de datos sin columnas o filas vacías.

Así que decidí pensar unos minutos en cómo se podría resolver este problema de una forma general y pude elaborar la siguiente función:

Sub Ultima()
'
' Encuentra la última fila y la última columna
'

Dim NoEmpty As Integer
Dim Counter As Integer
Dim ColumnIndex As Integer
Dim RowIndex As Integer
' 1. Inicializa alguna variables
RowIndex = 0
Counter = 1
'2. Cuenta el total de datos en nuestra hoja de trabajo
NoEmpty = WorksheetFunction.CountA(Cells)
'3. Busca contar desde la primera columna cuantos datos contiene
Do While NoEmpty > 0
'4. Descuenta los datos encontrados por columna
If Application.WorksheetFunction.CountA(Columns(Counter)) > 0 Then
NoEmpty = NoEmpty - Application.WorksheetFunction.CountA(Columns(Counter))
'5. Cuenta la fila más grande encontrada hasta el momento y almacena el valor
If RowIndex < Cells(65536, Counter).End(xlUp).Row Then
RowIndex = Cells(65536, Counter).End(xlUp).Row
End If
End If
Counter = Counter + 1
Loop
ColumnIndex = Counter - 1
Cells(RowIndex, ColumnIndex).Select
MsgBox ("Última Columna " & ColumnIndex & ", Última Fila " & RowIndex)

End Sub


Explicaré un poco su funcionamiento:


  1.  En la primera parte inicializo algunas variables que luego serán usadas.
  2. Cuenta el total de datos de cualquier tipo (excepto vacíos y errores) en toda la hoja de cálculo seleccionada, en nuestro ejemplo es 26 y es el valor que toma la variable NoEmpty.
  3. Esta es la parte más importante, como 26 es mayor que cero 0, se hace el primer loop que cuenta los datos en la columna 1 con la función CountA.
  4. Si el conteo de datos en la columna 1 es mayor a cero, entonces descuenta el número de datos a la variable NoEmpty y guarda el nuevo valor.
  5. Como ya descontó a la variable NoEmpty significa que esa columna tiene datos y por lo tanto nos interesa saber cuál es la última fila con datos y conservar su valor máximo en RowIndex.

El proceso desde el paso 3 continua hasta que la variable NoEmpty vuelve a ser 0, lo que indica que el contador counter ya llegó a la última columna con datos.

Esta función es parte de un algoritmo que estoy desarrollando para analizar APUs (Análisis de Precios Unitarios) y de seguro es muy útil para otras aplicaciones.

Si encuentran una forma más sencilla de lograr esto, por favor compartirla. Acepto observaciones que me puedan ayudar a mejorar la función.

Ejemplo:

Le puse la cosa un poco más difícil y corrí la función, lo cual me dio el siguiente resultado:

Fuente propia



No hay comentarios.:

Publicar un comentario