martes, 6 de octubre de 2009

Otro ejemplo de BDSUMA

Un breve apunte para contestar la pregunta de un lector sobre el uso de la función de excel BDSUMA (ver Funciones para bases de datos)
Si tuvieramos la siguiente tabla de datos y necesitaramos conocer la suma de los importes que correspondan al rango de fechas en tu ejemplo, del 30/07/09 al 7/08/09 :


lógicamente sabemos que debemos aplicar la función
=BDSUMA(base de datos; campo ;criterios)
que en nuestro ejemplo sería:


Es decir, la suma de los 'Importes' de los registros (cuentas de gasto) que cumplen la condición dada, es decir, que la fecha se encuentre entre el 30/07/2009 y el 07/08/2009, es de 43.850,00 eur.
Recordemos brevemente el funcionamiento de esta función de Excel BDSUMA. En el primer argumento seleccionamos el rango de celdas de nuestra base de datos, por tanto, incluímos la cabecera de los títulos. En el segundo argumento de la función indicamos qué campo deseamos que nos sume, acumulando aquellos registros que cumplan las condiciones del tercer argumento. Por último el tercer argumento, el más importante, ya que sin éste, tendríamos una función SUMA normal. En este punto, os remito a la entrada comentada Funciones para bases de datos; si bien comentaré un punto importante, y es que dos condiciones en la misma línea o fila de la hoja de cálculo equivale a exigir el cumplimiento simultáneo (es decir al Y), sin embargo que se encuentren en distintas líneas nos permite un cumplimiento alternativo, esto es, que se cumpla una condición o bien la otra (es decir el O); siempre, en los casos de condición directa-no con fórmula asociada a la base de datos- con el Nombre del campo encima de las condiciones.

24 comentarios:

  1. CHE, muy bueno pero yo estoy haciendo una tabla dinàmica y necesito calcular el importe bruto de las columnas precio*cantidad. mas o menos asi lo tengo planteado bdsum("nombre de la bd","precio*cantidad",criterio). Mi problema està en criterio. no se si podes darme una ayuda en esto. gracias. fernando

    ResponderEliminar
  2. el error que me da es error en la formula. por las dudas exactamente: BDSUM("tp2","PRECIO*'CANTIDAD DE PRODUCTO'", no lo se aun). Lo de "tp2" asi se llama en el odbc.

    ResponderEliminar
  3. Hola Fernando,
    Veamos, si realmente necesitas trabajar con una Tabla dinámica, puedes hacer dos cosas:
    1- generar un Campo calculado por el producto precio*cantidad
    http://excelforo.blogspot.com/2009/08/tabla-dinamica-campos-calculados.html
    2- crear una columna anexa a la Tabla de datos, y después generar la tabla dinámica sobre todos los campos.
    Si estás importando tus datos, entiendo que sí, ya que comentas que el nombre de la base de datos es 'tp2', para realizar la segunda opción deberás llevarte la tabla de datos plana a una hoja de cálculo y después seguir las indicaciones del punto 2.
    Existe otra posibilidad, y es utilizar sobre la base de datos importada la función SUMAPRODUCTO(precio; cantidad) con lo que también conseguirás el resultado deseado...
    Saludos

    ResponderEliminar
  4. gracias por la respuesta, hice lo del punto uno, creo que es la mejor soluciòn, por que el total de ese campo calculado es lo que buscaba justamente. Muy bueno tambièn la propuesta de soluciones alternativas.

    ResponderEliminar
  5. hola,
    yo utilizo esta función para leer datos que se encuentran en otro libro, y si cierro este último entonces no me coge la información, ¿hay alguna manera de arreglarlo?

    ResponderEliminar
  6. Si has vinculado un libro con otro tendrás creado unos 'vínculos', por tanto cuando quieras actualizar los datos (aunque el libro origen esté cerrado), tendrás que irte a la herramienta de Vinculos, puedes verlo en:
    http://excelforo.blogspot.com/2009/12/modificar-vinculos-en-excel.html
    y actualizar valores...
    Saludos

    ResponderEliminar
  7. Gracias. Ya he utilizado la opción de 'actualizar valores' y entonces me sale #¡VALOR! en todas las casillas. ¿Existe alguna otra opción que pueda probar?

    ResponderEliminar
  8. Amigo lector,
    es difícil dar una respuesta, pero me atrevería a confirmar que el problema es que el fichero origen ha cambiado de ruta y por ese motiva al actualizar los valores desde 'vinculos' te devuelve un error de #¡VALOR!.
    Confirma esta hipótesis, por que no se me ocurre que otro problema puede generar ese error...
    Si fuera este el caso, deberás desde la herramienta 'vinculos' modificar vinculos.
    Espero sea esta la solución.
    Slds

    ResponderEliminar
  9. Hola,

    Tengo una base de datos en las que quiero hacer una gran cantidad de consultas con BDSUMA. ¿Tengo que hacer una tabla con los criterios para cada consulta?

    ¿Hay alguna forma de introducir los criterios directamente en la fórmula BDSUMA sin necesidad de construir una tabla?
    De esta forma me ahorraría la necesidad de introducir esta gran cantidad de tablas.

    Gracias

    ResponderEliminar
  10. Hola!
    con la función BDSUMA me parece complicado, ya que hasta donde yo se, el campo de 'criterios' exige un rango de celdas...
    pero quizás puedas reemplazar esa función por una SUMA condicionada matricial, del estilo:
    {=SUMA(SI(A:A="a";SI(B:B="x";C:C)))}
    si tenemos una tabla de tres columnas, en la columna A y B los datos sobre los que aplicar condiciones, y el la columna C los datos a sumar para las coincidencias.
    Es lo primero que se me ocurre para que lo tengas controlado y puedas introducir los criterios directamente en la función.
    Slds

    ResponderEliminar
    Respuestas
    1. hola, me parace bastante interesante y un remedio para mi proyecto en excel ya que no he podido sumar los valores de una columna que sean menores o iguales al valor de una hora especifica que se encuentra en una celda aislada. Mi matriz tiene 1er. criterio, y el 2do criterio quiero que sea el intervalo de horas menores de cierta hora hasta las 12:00:00am y la columna que debe sumar es otra que contiene unos numeros. Puse tu formula {=SUMA(SI(A:A="a";SI(B:B="x";C:C)))} pero me esta sumando todos los valores de la columna C. Asi esta mi formula:

      =SUMA(SI(A:A="Activaciones - Agentes - Consolidado",SI(B:B<=AP8,AI:AI)))

      donde Activaciones - Agentes - Consolidado es la columna A donde se aplica el 1er filtro.

      La columna B es donde quiero filtrar los valores de hora menores a la que esta en la celda AP8 y que cambia al actualizar la conexión.

      Y la columna AI es donde estan los valores a sumar que son simples numeros.

      Saludos a todos espero por favor me ayuden y solucionar esta tranca que tengo varios dias :(

      Eliminar
    2. Hola ElGerente,
      bueno, quizá haya entendido mal, pero Activaciones-Agentes-Consolidado debe ser el criterio, no el rango donde evaluarlo. La segunda condición tiene buena 'pinta', ya que evaluas la columna B (donde aparecen horas) y te quedas con sus valores correspondientes de la columna AI.
      Si no te funciona correctamente (sin ver el ejemplo se hace complicado) puede ser por que:
      1. no ejecutas correctamente la función matricial.
      2. la primera condición no esté bien definida.
      3. Trabajar con horas siempre da problemas, ya que lo que vemos es una máscara que da formato de hora a un valor entre 0 y 1 (00:00 y 24:00 horas del día).
      Revisa lo comentado, y si te sigue fallando envíame el ejemplo a:
      excelforo@gmail.com
      Slds

      Eliminar
  11. Buenas tardes... Tengo una duda. Soy de Colombia. Necesito y no se si por esta formula lo logre, que Excel escoja las celdas que posiblemente me de la suma de cierto valor Ejemplo. Tengo 100 registros y cada registro es un valor consignado. Cuando le ingrese el valor a calcular me arroje las celdas que posiblemente combinadas me de el valor a calcular.

    ResponderEliminar
    Respuestas
    1. Hola,
      creo que te será de interés leer estas dos entradas ya publicadas, donde se explica una forma de conciliar una cantidad empleando la herramienta Solver.
      http://excelforo.blogspot.com.es/2011/12/conciliar-en-excel-por-aproximacion-con.html
      http://excelforo.blogspot.com.es/2011/10/conciliar-una-partida-con-solver.html
      Espero sea de tu utilidad.
      Un cordial saludo

      Eliminar
  12. Buenas tardes.
    Tengo 2 tablas, identícas, en 2 hojas separadas dentro del mismo libro. ¿cómo puedo ahcer para aplicar, por ej, un promedio, que considere las dos tablas, con los mismos crtiterios??
    Gracias

    ResponderEliminar
    Respuestas
    1. Hola Juan,
      podrías aplicar la herramienta Consolidar (Ficha Datos > grupo Herramientas de datos > Consolidar), esto te permitiría agregar datos de diferentes hojas y promediarlas...
      Slds

      Eliminar
  13. bueno muy bueno.....

    ResponderEliminar
  14. Buenas tardes... esoty tratando de hacer que la planilla que uso cuente solamente unas "habilitaciones" de una fecha especifica esta no logro que funcione.
    La formula usada en este caso es suma.si; pero como no me funciona estoy intentando con bdsuma... pero lamentablemente tampoco logro que funcione...

    =SUMAR.SI(A9:A975,"="&$L$3,$C$9:$C$975)

    =BDSUMA(A8:M1681,Habilitacion Post,L2:L3)

    esta 2 estan en celdas distintas... pero como soy usuario excell autodidacta no logra hacer que estas funcionen...

    Bueno esperando su pronta respuesta saludo a ustedes.

    Claudio

    ResponderEliminar
    Respuestas
    1. Hola Claudio,
      respecto a la primera SUMAR.SI, que si quieres contar, deberás usar CONTAR.SI.
      entiendo que en el rango A9:A975 están las fechas de las 'habilitaciones', y que en L3 especificas la fecha en cuestión.
      En este caso, podrías emplear la fórmula:
      =CONTAR.SI(A9:A975;L3)

      lo que te contará coincidencias en el rango A:A a la fecha dada en L3.

      Si no te sirve, envíame el ejemplo que tengas a
      excelforo@gmail.com

      por que me descuadra que ambas funciones persiguieran lo mismo.
      Slds

      Eliminar
  15. Hola! - Genial esta BDSUMA. Pero no he logrado que me sume los valores de una columna, que resultan de restar dos fechas. :-(
    ¿Qué estaré haciendo mal?

    ResponderEliminar
    Respuestas
    1. Ya lo hizo! - SOLUCIÓN: Extender el rango de criterios una fila más abajo.

      Eliminar
    2. Hola Adrián,
      al situar en filas diferentes los criterios están indicándole que aplique el criterio O.

      Un saludo

      Eliminar
  16. CUANDO SE UTILIZA LA FORMULA =SUMAR.SI(FACTURAS,A5,ABONOS)

    A FACTURAS LE DAN EL RANGO Y A ABONOS TAMBIÉN ME GUSTARÍA SABER COMO SE LOGRA DAR EL NOMBRE A UN RANGO ...

    ResponderEliminar
    Respuestas
    1. Hola Edward, un placer saludarte...
      para asignar Nombres definidos puedes leer algunas entradas en
      http://excelforo.blogspot.com.es/search/label/Asignar%20nombres%20a%20rangos

      Saludos cordiales

      Eliminar