Post Destacado

Configurando la Impresión Perfecta de un Libro de Excel

Aunque vivimos en una era digital, a veces todavía es necesario imprimir datos, tablas, gráficos, o información de cualquier tipo que hayamos procesado en Excel. Especialmente si estamos hablando de informes financieros, gráficos estadísticos, o simplemente porque preferiremos analizar la información en formato físico. Sin embargo, Excel es muy flexible y las hojas pueden volverse rápidamente muy extensas, lo que puede complicar las tareas de impresión. A continuación, detallaremos el proceso para configurar y preparar tu libro de Excel para imprimirlo de la mejor manera posible en cada caso. Paso 1: Revisión Preliminar Antes de imprimir, debes revisar cómo quedará el documento una vez impreso. Excel ofrece dos opciones para ello: a. Ve a la pestaña "Archivo", luego elige "Imprimir". Aquí puedes ver cómo se verá tu documento antes de imprimirlo. b.    Utiliza la opción 'Diseño de Página'. Esta perspectiva te dará una vista preliminar de cómo se verá tu libro

Encontrar la última fila (o columna) de nuestros datos, usando VBA

 


Encontrar la última fila con datos es un proceso muy frecuente que deberemos realizar en un proyecto de VBA si queremos automatizar el ingreso de datos, tal que nuestras tablas continúen expandiéndose más allá del último registro. Es decir, es un proceso que llevamos a cabo cuando necesitamos detectar dónde terminan nuestros datos, a fines de poder seguir agregando nuevas filas a continuación, logrando de esta manera que nuestros registros sean dinámicos.

El objetivo de la siguiente guía es servir como referencia rápida que puedas utilizar la próxima vez que necesites identificar la última fila de una tabla, dado que existen distintas estrategias para hacerlo, tal que puedas decidir rápidamente cuál resultará más conveniente aplicar en tu caso. También, la intención es que puedas comprender verdaderamente cómo cada uno de estos métodos funciona, identificando la lógica detrás de las diferentes alternativas.


Propiedad Range.End

La propiedad End explora un rango de datos por regiones, es decir, por conjuntos de celdas contiguas que se encuentran todas con datos o vacías hasta encontrar la última o primera celda con datos respectivamente. Dicha propiedad se aplica sobre un rango (una referencia a una celda), y devuelve como resultado otro rango (referencia), que resulta al buscar uno de los límites. En otras palabras, una región de celdas vacías termina en cualquiera de sus límites donde se encuentre la primera celda que no está vacía (qué contiene datos), y una región de celdas con datos termina donde se encuentre la celda que a continuación tenga una celda vacía. Para utilizar esta propiedad, debemos especificar el sentido en el cual queremos explorar nuestra región de datos (hacia arriba, hacia abajo, hacia la derecha o hacia la izquierda), con lo cual con mínimas adaptaciones podemos utilizar esta propiedad para hallar tanto la última fila como la última columna con datos.

La forma en la que está propiedad por lo general se implementa para encontrar la última fila con datos es: partiendo desde la última fila de nuestra hoja de Excel, subiremos a través de las celdas vacías hasta encontrar el final de este rango (la primera celda con datos).

ultimafila = Cells(Rows.Count, 1).End(xlUp).Row

  • Rows.Count: devuelve la cuenta de filas de nuestra hoja (todas las filas que existen, tengan datos o no)
  • Cells(Rows.Count, 1): devuelve la referencia a una celda que se ubica en la última fila, y primera columna
  • End(xlUp): propiedad End en dirección hacia arriba según la explicación anterior, aplicada sobre la referencia a esta última celda con datos
  • Row: propiedad que nos permite obtener la fila de la referencia así obtenida mediante la propiedad End

De esta manera, la variable ultimafila almacenará un número, que podremos utilizar para construir una referencia con el objeto Cells(numerofila, numerocolumna). Como lo que hemos obtenido es el número de la primera fila que contiene datos, sabremos que la primera fila vacía será aquella que se encuentre a continuación, es decir: ultimafila + 1

Una manera alternativa de implementarlo es partir desde arriba, y buscar hacia abajo el final de nuestros registros:

ultimafila = Cells(1, 1).End(xlDown).Row

Pero atención: si por cualquier motivo existen discontinuidades en nuestros datos (filas vacías intermedias, encabezados, etc.), podremos no estar detectando correctamente el final de nuestros datos, sino solamente el final de la primera región. Mientras que la primera opción es la recomendada en general, esta alternativa puede ser útil en el caso de hojas con bases de datos densas desde la primera fila hasta el final de la tabla de datos.

Para hallar la última columna con datos:

ultimacolumna = Cells(1, Columns.Count).End(xlToLeft).Column

  • Como ves, aquí hemos invertido la lógica, y exploramos (para el caso de la fila 1, pero esto dependerá de tus datos), desde el extremo final de nuestra hoja, hacia la izquierda, buscando hallar la última columna.


Propiedad Worksheet.UsedRange

Esta propiedad nos devolverá el rango completo de celdas utilizado en nuestra hoja de trabajo, a partir de identificar dos vértices: el extremo superior izquierdo y el extremo inferior derecho, de celdas que contengan datos. Dicho de otro modo, identificar a la celda con datos que se encuentra en la fila Superior y la columna más a la izquierda, hará lo mismo con la celda que se encuentra en la parte inferior y más a la derecha, y de volver a un Rango construido entre estos dos vértices.

Esta propiedad se utiliza en conjunto con el método specialcells, el cual podemos utilizar para identificar algunas celdas específicas dentro de un Rango. Particularmente de este Rango lo que nos interesa es la última celda (el vértice inferior derecho). Al igual que el caso anterior finalizaremos obteniendo el número de fila.

Para obtener la última fila con datos:

ultimafila = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

  • ActiveSheet: es la hoja activa al momento de ejecución del código
  • UsedRange: propiedad que identifica el rango que encierra a todos los datos que contiene nuestra hoja
  • SpecialCells(xlCellTypeLastCell): método que nos permite obtener, sobre el rango anterior, una celda específica, donde xlCellTypeLastCell es la “última celda”, localizada en el extremo inferior derecho de nuestro rango (es decir, en la última fila y última columna que contienen datos)
  • Row: al igual que el caso anterior, podemos obtener el número de fila, para luego construir una referencia.

Para obtener la última columna con datos:

ultimacolumna = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column

En este caso, la variación necesaria fue mínima, solo modificando la propiedad Row por la propiedad Column, ya que todos los demás pasos nos permiten obtener también la columna en el extremo derecho de nuestro rango.


Método Find

El método Find es un método muy importante (puedes leer más en detalle aquí), que también tiene su aplicación en permitirnos encontrar la última fila con datos. Para ello, elegiremos buscar cualquier valor (a través del comodín *), a lo largo de filas (o columnas), hasta encontrar el valor previo (o en otras palabras, buscar desde el final hacia adelante):

ultimafila = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

  • Cells: como debemos especificar el rango de celdas en el que queremos buscar, indicamos simplemente “todas las celdas de esta hoja”
  • Find: método de búsqueda con alto nivel de parametrización, que nos devuelve un objeto Range basado en dichos parámetros, y sobre el que te recomiendo leer en específico en nuestro artículo:
  • Row: nuevamente, la famosa propiedad que nos permite obtener el número de fila del rango resultante anterior

ultimacolumna = Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column

  • Para encontrar la última columna, solo necesitamos modificar el parámetro searchorder de nuestro método Find, y cambiar la propiedad Row por Column, tal como hemos hecho para los casos anteriores.