# Rango de base de datos variable



## Niko (May 4, 2009)

Hola, estoy haciendo una macro y estoy teniendo problemas en la sentencia del Vlookup.
Mas precisamente en la parte del table array o rango de la base.
Este valor para mi es desconocido. puesto que las hoja excel que abro tiene diferente cantidad de líneas (el formato siempre es el mismo), solo cambia la cantidad de información que viene. Ya que son las ventas diarias y hay días que se vende más y otros que se vende menos.
La pregunta es hay alguna forma de saber el rango de la base ?, entiendo que podría sobre dimensionar el rango de la base pero siempre estaría el riesgo de que información quede afuera de la búsqueda.

Muchas gracias por la ayuda que puedan prestar
Saludos
Nicolás


----------



## Greg Truby (May 4, 2009)

Hola Nicolás. Sí se puede. La forma más sencilla es un rango nombrado dinámico (dynamic named range). Disculpe pero tengo prisa en este momento. Aquí están mis instrucciones en inglés. Trataré de traducirlas al castellano hoy más tarde o mañana. 

*Dynamic Named Ranges*

Dynamic named ranges can be used just like normal named ranges in formulas, or as sources for things like pivot tables and charts. However instead of a normal named range where the group of cells being referred to is static, dynamic ranges typically take advantage of the Offset() and CountA() [or Count()] functions to create a range that resizes to include new data appended to the bottom of the range. 


*To Create a Dynamic Range*
From the menu Insert | Name | Define...
In the _Names in Workbook_ textbox, type in the name for the Named Range - probably something like "Data" or "DataRange".
In the _Refers to_ textbox type in a formula like the following (note: you may find it helpful to hit the F2 key while in the textbox to put it into "edit mode"):
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),9) to start at A1, include all *non-blank* rows and 9 columns. (Good example for pivot tables where you want to include headers.)
=OFFSET(Sheet1!$B$2,0,0,COUNT(Sheet1!$B:$B),1) to start at B2, include all *numeric* rows and 1 column. (Good example for a chart data series.)
=OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1) to start at A2, include one less than the count of all *non-blank* rows and 1 column. (Good example for a chart category series where values are not numeric.)

You're ready to reference the Named Dynamic Range like you would a normal Named Range.
Además, si usted nos puede dar un pequeño ejemplo de sus datos podríamos ofrecerle unos ejemplos más concretos.


----------



## Greg Truby (May 5, 2009)

*Rangos Nombrados Dinámicos*
Rangos nombrados dinámicos se puede usar como un rango nombrado en fórmulas o como fuentes de cosas como tablas dinámicas (pivot tables) y gráficos. En el caso de un rango nombrado normal la referencia es estática. En cambio un rango nombrado dinámico emplea OFFSET() y COUNTA() o COUNT() para crear un rango que cambia de tamaño para incluír datos nuevos añadido al fin del rango.


*Para Crear un Rango Dinámico*
Del menú Insert | Name | Define...
En la caja de texto _Names in Workbook_ escriba el nombre deseado del rango - probablemente algo como "Datos" o "RangoDeDatos"
En la caja de texto _Refers to_ ponga una fórmula como la siguiente (puede ayudarle si presiona la tecla F2 para poner la caja de texto a "modo de editar"):
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),9) para empezar en celda A1, e incluir todas las filas *no vacias en columna A* y 9 columnas. (Por ejemplo para una tabla dinámica donde quiere incluir cabezas.)
=OFFSET(Sheet1!$B$2,0,0,COUNT(Sheet1!$B:$B),1) para empezar en celda B2 e incluir todas las filas con datos *numericos* en columna b y solamente la columna B. (Un ejemplo sería una serie para un gráfico.)
=OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1) para empezar con A2 e incluir una fila menos que la cuenta de filas *no vacias* en columna A y una columna (un ejemplo sería una serie de gráfico donde los valores no son numericos.)

Ahora usted está listo para usar un Rango Nombrado Dinámico como un rango normal.


----------

