You are on page 1of 5

Creacin de un Maestro-Detalle en Excel

Hoy vamos a echar un vistazo a la funcin BUSCARV, y hacer


funcione una manera de superar su principal inconveniente:
devuelve un solo valor que coincida con la bsqueda.

que
que

Si eres como yo, habr veces que tendrs una gran tabla de datos que
est bastante bien normalizada, y quieres mostrar todas las filas de
esa tabla que coinciden con un cierto criterio. Bueno, esto es fcil
de obtener utilizando BUSCARV (de hecho, es ms fcil que nunca con
las nuevas referencias estructuradas en Excel 2007):

Figura 1: BUSCARV es una manera fcil de devolver un valor fuera de la


primera fila que contiene un nombre de cliente.
Como se puede ver arriba, con referencias estructuradas en Excel 2007,
estamos igualando al valor de la celda A9 en la primera columna de la
Tabla 1 y devolvemos el valor de la columna 3 ($ 25.00). Esto es muy
bonito, y muy til (especialmente si se utiliza BUSCARV como parte de
una columna calculada en una tabla), pero tiene el inconveniente de
que no siempre nos permite devolver cualquiera de los valores para el
segundo "Dan" en la lista. Y, si eres como yo, esto puede ser muy
frustrante. A veces realmente necesito ver algo ms que la primera
fila. As que hoy vamos a ver cmo podemos hacer esto, y recuperar
todos los valores de una tabla que coinciden con un cierto criterio.
Antes de empezar a trabajar en la solucin, vamos a copiar xponer los
datos que vamos a utilizar. Utilizamos la base de datos Neptuno que se
incluye con casi todas las versiones de ACCESS:

Figura 2: La tabla "Clientes", insertada en una hoja llamada clientes,


y nombrada como "tblClientes" para facilitar la consulta en el futuro.

Figura 3: La tabla "Pedidos", insertada en una hoja llamada pedidos, y


nombrada como "tblPedidos " para facilitar la consulta en el futuro.
Figura 4: La tabla "Detalles de Pedidos", insertada en una hoja
llamada detalles, y nombrada como "tblDetalles" para facilitar la
consulta en el futuro.
As que ahora que tenemos todos nuestros datos de origen, quiero
juntarlo todo en un Formulario Maestro-Detalle real. Nada de lujos,
pero bsicamente quiero seleccionar el nmero de pedido que yo desee
comprobar, y ver algunos detalles sobre ese pedido (quin lo orden,
el estado del pedido, etc.), as como todos los elementos que forman
parte de ese pedido (nombre del artculo, precio, cantidad, etc.).
cosas bastante estndar. Aqu est nuestro resultado final:

Figura 5: El formulario maestro-detalle en el que puedo escoger un


nmero de pedido y ver todos los detalles.
Aqu estn los pasos que debes seguir (tener en cuenta que estos pasos
se saltan el formato, ya que no a todo el mundo le gusta el color
verde de la manera que yo lo hago):
1. Introduce
clculo:
a.
b.
c.
d.
e.
f.
g.

B1:
C3:
C4:
F4:
F5:
F6:
F7:

las

siguientes

cadenas

Nmero de Orden.
Informacin del Pedido.
Cliente.
Fecha del Pedido.
Estado.
Vendedor.
Fecha de Venta.

estticas

en

la

hoja

de

h.
i.
j.
k.
l.
m.
n.

C10:
C11:
D11:
E11:
F11:
G11:
H11:

Detalles del Pedido.


Producto.
Cantidad.
Precio Unidad.
Descuento.
Precio Total.
Estado ID.

2. Crear un rango con nombre que incluya todos los ID de Pedidos,


que vamos a utilizar para crear el desplegable utilizando
Validacin de Datos. Para ello, haz clic en la ficha
Frmulas/Definir nombre, y escribe:
a. Nombre: IDs de Pedidos.
b. Referido a: = tblOrders[ID]
Consejo: Validacin de datos no puede referirse a rangos en
una hoja distinta a la que contiene la validacin, pero
mediante el uso de un rango con nombre, se pueden obtener
valores a partir de otra hoja (y en este caso, obtener una
lista
de
valores
dinmica
utilizando
la
referencia
estructurada para obtener una columna entera de una tabla,
incluso si los nuevos valores se agregan a l en el futuro)
3. Seleccionar D1 y el nombre que rngOrderId (vamos a utilizar esto
ms adelante).
4. Con
D1
an
seleccionado,
haz
clic
en
la
ficha
de
Datos/Validacin de datos y crea un nuevo tipo de lista de
validacin con el origen: =OrderIDs. Boom, ahora tienes tu
men desplegable.
5. Bien, ahora vamos a crear algunos BUSCARV "normales" como hemos
comentado anteriormente ya, pero con un pequeo toque para que
sean un poco ms robustos: vamos a utilizar la funcin de
concordancia MATCH para que nos devuelva la posicin de la
columna para el valor que queremos recuperar de la tabla de
origen.
6. Seleccionar C5 y escribir la siguiente funcin:
=BUSCARV(rngOrderId,tblPedidos,MATCH(C4,tblPedidos[#Headers],0),FALSO)
Aqu hemos dicho que encuentre el ID del pedido que he seleccionado en
la tabla Pedidos, y devuelve el valor de la columna que coincide con
el Cliente.
7. Al igual que en C5, vamos a configurar el resto de las funciones
normales BUSCARV para devolver metadatos acerca del pedido, es
decir, todos los datos "Master" en esta forma Maestro-Detalle:
C6:
=VLOOKUP($C$5,tblCustomers,MATCH(Address,tblCustomers[#Headers],0),
FALSE)
C7:
=VLOOKUP($C$5, tblCustomers, MATCH(City,tblCustomers[#Headers],0),
FALSE)
&
,
&
VLOOKUP($C$5,
tblCustomers,
MATCH(State,tblCustomers[#Headers],0), FALSE) & & VLOOKUP($C$5,
tblCustomers, MATCH(Zip,tblCustomers[#Headers],0), FALSE)
H4:
=VLOOKUP(rngOrderId, tblOrders, MATCH(F4, tblOrders[#Headers], 0),
FALSE)
H5:

=VLOOKUP(rngOrderId,
FALSE)
H6:
=VLOOKUP(rngOrderId,
FALSE)
H7:
=VLOOKUP(rngOrderId,
FALSE)

tblOrders,

MATCH(F5,

tblOrders[#Headers],

0),

tblOrders,

MATCH(F6,

tblOrders[#Headers],

0),

tblOrders,

MATCH(F7,

tblOrders[#Headers],

0),

Ahora vamos a pasar a la parte de "Detalles" del formulario, y aqu es


donde vamos a llegar a encontrar una solucin a la limitacin de
BUSCARV y que no devuelva ms que un valor nico.
Antes de construir la solucin real, vamos a hablar de algunos de los
elementos de la frmula que vamos a crear:
1. No vamos a utilizar realmente BUSCARV. Puesto que tenemos que
devolver varios artculos, lo que realmente necesitamos es una
manera de devolver una matriz (lista) de los valores, y BUSCARV
simplemente no permite eso. En su lugar, vamos a utilizar la
funcin INDEX para devolver el valor en una fila y columna
especfica.
2. Necesitamos una forma de designar qu elemento de la matriz
queremos mostrar en la celda, y vamos a utilizar una combinacin
de las funciones SMALL y ROW para lograr eso.
3. Queremos que esto sea robusto de la misma manera que hicimos
nuestra funcin BUSCARV robusta. Es decir, queremos estar
seguros de que si aadimos columnas adicionales a nuestros datos
de origen, estas funciones no se rompan. Al igual que con la
solucin BUSCARV, usaremos COINCIDIR (MATCH) para que as sea.
Consejo: Un efecto secundario interesante de lo que vamos a hacer
aqu es que este formulario es totalmente rellenable dentro de la
porcin de "Detalles", lo que hace que sea muy fcil trabajar con
l.
4. Por ltimo, queremos tener un poco de control de errores. En
concreto, vamos a utilizar SI.ERROR (una nueva funcin en Excel
2007) para asegurarse de que slo mostramos una celda "en
blanco" si hay un error en el clculo.
5. OK, as que sin ms prembulos, vamos a ver esa funcin, tal
como existe en la celda C12 (ten en cuenta que cuando se entra
en esta funcin, se entra sin las llaves y se pulsa Ctrl + Shift
+ Enter, lo que aade las llaves, lo que la convierte en una
funcin de matriz):

6.

8.
9.
10.
11.
12.

You might also like