Hojas de cálculo en Excel - página principal

Uso de la función BDContar

Aprovechando que ayer Neus, una lectora del blog que dejó una pregunta sobre como operar con fechas, y como agrupar datos, os pongo aquí la solución.

Se trata de una hoja de cálculo donde tenemos una serie de productos que hemos comprado en diferentes días. Un día hemos comprado lechugas, otro patatas, al siguiente lechugas, y al otro coles de Bruselas. Se trataría de determinar cuantas veces a lo largo de un periodo de tiempo, hemos adquirido tal o cual producto.

Los datos serían estos:


Y queremos determinar cuántas veces hemos comprado patatas entre el 1 y el 31 de marzo de 2008.

Una de las formas más sencillas de solucionarlo (seguramente habrá alguna otra más compleja, pero no he entrado a analizar esa posibilidad), es utilizando la función de bases de datos llamada BDContar. Ya sabemos todos que Excel no es la aplicación de Office más apropiada para gestionar grandes volúmenes de información con datos uniformes, y que Access sería la aplicación más indicada, pero para pequeños volúmenes de información, Excel nos es más que suficiente.

Pues bien, este sería el planteamiento con Excel. Fijaos en la zona sombreada en rojo:


Esa zona sombreada en rojo, es el sitio donde hemos incluido las condiciones a evaluar en la fórmula. La fórmula es esta:


=BDCONTAR(B8:C22;"FECHA";B4:D5)

Donde el rango de datos que hay entre B8 y C22 es la tabla con los productos y las fechas, el rango que va desde B4 hasta D5, es el rango de condiciones, y FECHA es el campo cuyas condiciones queremos evaluar.

Si por ejemplo quisiéramos evaluar cuantas veces se han comprado patatas entre el 1 y el 31 de marzo de 2008, y cuantas veces se han comprado lechugas a partir del 1 de abril, deberíamos incluir esto:


Y la fórmula sería ahora esta otra:

=BDCONTAR(B8:C22;"FECHA";B4:D6)

Desde aquí podéis descargar el fichero de excel, con el ejercicio resuelto.



15 comentarios:

Anónimo dijo...

Hola Javier. Gracias por tu publicacion, pero tengo una pregunta. Que debo hacer si quiero sumar todas las compras (es decir, sin discriminar a patatas o lechuga) realizadas en marzo, por ejemplo. debería de colocar en el rango superior donde defino el criterio todos los items, uno a uno?

Gracias!

Javier Marco dijo...

Si te descargas el ejemplo de megaupload, verás que eliminando el dato de la celda B5, es decir, el nombre del producto (en este caso, patatas), te tomará todos los productos entre el 1 y el 31 de marzo, pues al no definir ninguno en concreto, toma todos los productos.

Resumiendo, elimina el nombre del producto de la parte donde aparecen las condiciones (zona de arriba que he coloreado de rojo pálido), y tendrás el dato que buscas.

Salu2, y suerte.

Damis dijo...

Hola desde México. Trabajo en una escuela y manejo información de alumnos con sus respectivas calificaciones entre cada bimestre y las finales. Necesito clasificar por sexo a los alumnos que reprueben 1 o mas materias. Crees que a traves de alguna funcion como BDCONTAR pueda obtener estos resultados. Gracias de antemano por la ayuda que me puedas dar. Gracias por compartir tus conocimientos de excel.

Javier Marco dijo...

Damis, aquí te dejo un ejemplo. Se podría resolver con BDcontar, pero más difícil. En esta entrada del blog, hay un ejemplo que te puede servir, pero especialmente útil es el comentario que dejó un usuario, y donde daba una solución más sencilla a la que yo planteé:

http://hojas-de-calculo-en-excel.blogspot.com/2008/06/funciones-de-bases-de-datos.html

Si quieres decargar un ejemplo con la solución a ese problema que planteas, aquí te lo dejo:

http://www.megaupload.com/?d=MDYF28S0

PD: Introduce los 4 caracteres que aparecen arriba a la derecha, en megaupload, para descargar el fichero.

Saludos.

David dijo...

Hola,estoy tratndo de implementar esta función con constantes matriciales:
=BDCONTAR({"OB";"NV"\"Ma";18},"NV",A1:B2)
Pero me arroja error. Alguna ayuda será muy agradecida.
Saludos a todos.
David

delia dijo...

Buen día!tengo la necesidadde contar el número de archivos que se encuentran en cierta carpeta, hay forma de realizar esto desde excell? podrías orientarme al respecto? gracias

Javier Marco dijo...

Pásate por este enlace, que te será útil: listar los archivos de un directorio.

Solo tienes que crear un contador, en el bucle for que verás en ese ejmplo.

Un saludo.

Anónimo dijo...

Hola una pregunta tal vez resulte tonta pero, si pongo fecha corre como tu dices pero si pongo alimentos me marca un 0, Que es lo que le estoy diciendo a excel con eso?

gracias de antemano

Javier Marco dijo...

Eso te pasa porque no estás interpretando bien la función BDCONTAR. Esquemáticamente sería algo asi:

=BDCONTAR(A;B;C)

A: Rango donde tenemos los datos que queremos evaluar (incluyendo los títulos o cabeceras).

B: Nombre de la columna, título o cabecera que queremos evaluar (en el ejemplo, la fecha).

C: Criterio que debe cumplirse (incluyendo títulos o cabeceras), En nuestro caso, las celdas que hay desde B4 hasta D5, es decir, que el producto comprado sean patatas, y que se hayan comprado en el mes de marzo.

Si cambias ALIMENTOS por FECHA, deberías hacerlo en 4 celdas: C4, D4, C8, y en la fórmula de D25. En ese caso, ya no te daría cero, sino 3, lo mismo que te da si pones FECHA. ¿Por qué?. Pues porque da lo mismo que le pongas FECHA, ALIMENTOS, CABALLOS, o EXCEL. Aunque sea una fecha, el encabezado o título, puede tener cualquier nombre, siempre que uses el mismo en todos los sitios donde te refieras a él.

Saludos.

Anónimo dijo...

Una pagina Excelente!! Master, es increible toda la ayuda que me has brindado, quisiera plantearte la siguiente duda, tengo un almacen pequeño y he logrado que cada vez que ingreso una venta me arroje en una celda contigua la hora en que se produjo:

producto cant valor Hra.
galleta 1 150 14:30:20

asi como lo digite, deseo poder calcular el numero de ventas por cada hora, cuantas entre 13:00:00 y 13:59:59 y asi sucesivamente para saber horas de mayor venta y de las de menor o cero ventas, me ayudaria muchisimo poder lograrlo y me tiene con dolor de cabeza el resolverlo, help please!...agradecido de antemano...

Javier Marco dijo...

No tengo ningún artículo que hable de ello, pero lo que quieres hacer se puede resolver con las denominadas "tablas dinámicas".

Haz una búsqueda en google de ese término, y encontrarás abundante ayuda sobre el tema.

Un saludo.

Luis Fernando dijo...

Cordial saludo:
Excelente el contenido y la forma de explicar las aplicaciones.
Hay alguna manera de que, ademas de contar los archivos que hay en un fichero, me permita listar: el tamaño, la fecha de creacion, ultima modificacion y hora?

Luis Fernando
Mil gracias

Javier Marco dijo...

Hola Luis Fernando. Supongo que tu duida nace después de leer este artículo: listar los archivos de un directorio.

Bueno, se puede hacer lo que pides. Con eso que has leído, más la información que hay en este otro artículo: Fecha de creación, modificación, último acceso, y peso en Kb de un fichero, se puede conseguir.

Aquí te pongo un ejemplo, que puedes aplicar al primer artículo cuyo link te incluyo en mi comentario. En ese artículo hay 4 ejemplos, y el primer macro, el llamado ficheros_del_directorio() lo he readaptado para conseguir lo que buscas. Este es el resultado:

Sub ficheros_del_directorio()
'Si hay errores, que continúe
On Error Resume Next
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'Creamos el objeto FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
'Informamos de la ruta de donde vamos a obtener
'los ficheros, en este caso, el mismo directorio
'donde tengamos grabado este fichero con el macro
ruta = ActiveWorkbook.Path
'definimos dos variables que necesitaremos,
'para recuperar el nombre de la carpeta, y
'los ficheros que haya dentro
Set directorio = fso.GetFolder(ruta)
Set ficheros = directorio.Files
'escribimos un encabezado en la celda A6
Range("A6").Select
ActiveCell = "Ficheros del directorio:"
ActiveCell.Offset(0, 1) = "Fecha/hora de creación:"
ActiveCell.Offset(0, 2) = "Fecha/hora de últ. modificación:"
ActiveCell.Offset(0, 3) = "Tamaño:"
Range("A6:D6").Select
'lo ponemos en negrita y subrayado
Selection.Font.Bold = True
Selection.Font.Underline = xlUnderlineStyleSingle
'escribimos los ficheros, a partir de A7
Range("A7").Select
For Each archivo In ficheros
'escribimos el nombre del fichero
ActiveCell = archivo.Name
ActiveCell.Offset(0, 1) = archivo.DateCreated
ActiveCell.Offset(0, 2) = archivo.DateLastModified
ActiveCell.Offset(0, 3) = FormatNumber(archivo.Size / 1024, 2) & " Kb"
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Next
'Limpiamos los objetos
Set fso = Nothing
Set directorio = Nothing
Set ficheros = Nothing
'Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub

Un saludo, y gracias por tu comentario.

Anónimo dijo...

MUY BUENAS. EN EL EJEMPLO DE LA COMPRA. COMO PUEDO CONTAR L0S DIAS QUE SE COMPRARON PATATAS, EN LOS ULTIMOS 15DIAS, Y QUE SE ACTUALICE AUTOMATICAMENTE CADA DIA. GRACIAS

Javier Marco dijo...

Pon en lugar de la fecha inicial, esto:

=">" & TEXTO(HOY()-15;"dd/mm/aaa")

Y en lugar de la fecha final, pon esto otro:

="<=" & TEXTO(HOY();"dd/mm/aaa")

De esa forma tendrás la fecha de hoy en la última fecha (fecha final), y 15 días menos en la fecha inicial. Cada día que abras el fichero, recalculará automáticamente la fecha actual, y la fecha 15 días antes, y siempre tendrás el datos actualizado qu buscas.

Saludos.