Ir al contenido principal

udf: sumar y contar celdas segun su color con VBA

Para ampliar los conceptos del post anterior, vamos a ver un ejemplo sobre el cual he recibido muchas consultas: sumar según el color de fondo de la celda.
La primera vez que me plantearon este problema lo resolví mediante macros, pero ya que estamos en el tema de las udf, lo resolveremos de esta forma.

Comentarios

  1. Como hago para que se recalcule el valor de la función cuando modifico el color o valor de una celda del rango?
    Muchas Gracias

    ResponderEliminar
  2. Estimado: si el recalculo en Excel se encuentra activado (siempre es así, salvo que manualmente o mediante una macro lo hayas cambiado), cada vez que se modifica el valor de una celda todas las formulas se recalculan de forma automática, sin necesidad de hacer nada.
    La mala noticia es que Excel no "dispara" un evento especial cada vez que se cambien los colores de las celdas, y no resulta posible que una formula se recalcule con el simple hecho de cambiar de color de fondo o de fuente.
    Pero podemos hacer un pequeño truco: te vas a un modulo y escribís:
    Private Sub Recalcular(H as String)
    Sheets(H).Calculate
    End Sub

    El Sub de arriba recibe un argumento, que es el nombre de la hoja en donde tenes las funciones que suman por color.
    Ahora te vas a la ventana de código de la hoja y en los eventos Worksheet_Change y Worksheet_SelectionChange pones:
    Recalcular(Activesheet.Name)

    Y listo. Esto fuerza a Recalcular el libro (instrucción: calculate) cada vez que el usuario cambie la selección actual o bien modifique algún valor de hoja.

    De esta forma, por decirlo de alguna manera, estaríamos creando los eventos necesarios paradetectar cambios y que las funciones se actualicen cada vez que Excel detecte cambios,
    Proba y cualquier cosa me avisas, que te armo un archivo y te lo envio.
    Gracias por tu mensaje.



    End Sub

    ResponderEliminar
  3. O bien, para hacerla mas fácil, te vas a la ventana de código de la hoja y en los eventos Worksheet_Change y Worksheet_SelectionChange solamente ingresas:
    Activesheet.Calculate

    Y listo, mas sencillo y sin la necesidad de crear procedimientos aparte.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

macros: como enviar mails desde Excel (vba)

Un gran amigo "on-line", Johan Moreno, de Colombia , me hizo llegar la inquietud de cómo enviar mails desde Excel . Si bien contaba con algunas líneas de código sobre el particular, decidí retomar mi ejemplo y adaptarlo mejor a las circunstancias. Hace unos minutos termino de remitirle un correo con la solución a Johan... desde Excel y con un archivo adjunto, mismo que transcribo a continuación para ayudar a todos con esta tarea. Veamos primero las dos formas principales de enviar mails: mediante Outlook o nuestro Web Mail ( yahoo, gmail, hotmail, etc, etc ) No soy usuario de Outlook en lo absoluto: no confío en los agujeros de seguridad que continuamente aparecen y, por otro lado, t eniendo a mi alcance una herramienta tan poderosa (y gratuita) como Gmail, la cual ahora también permite sincronizar los mensaje con la Pc para verlos offline (deben activarlo en "google labs") ... no creo que me haga usuario ni hoy ni mañana. Igualmente mas adelante daré una solució...

sopa de letras en excel

Un lector me comenta que pudo visualizar varias sopas de letras en YouTube, realizadas con Excel. Inmediatamente me dirigí a dicho sitio y busqué información al respecto. Los ejemplos son buenos y si, efectivamente, podemos armar una muy buena "sopa de letras", salvo que (digamos) es un trabajo bastante manual, cosa que intento evitar a toda costa en mis proyectos. Obviamente que la tarea de automatización incluye Macros, lo cual me insume tiempo, pero queda mucho mejor. Vamos primero a explicar muy brevemente la forma de realizar esta juego "a la clásica", para luego pasar a un desarrollo mucho mas complejo, pero también automatizado y realista. la clásica grilla de una sopa de letras [+/-] Ver el resto / Ocultar Bien, analicemos un poco la imagen superior: 1) es una grilla de 20 filas x 20 columnas, aunque bien podríamos hacerla del tamaño que quisiéramos. 2) Cada celda tiene una letra, que fue generada  mediante la anidación de dos funciones. 3) Vean ahora la ba...

postea tus dudas y consultas

este espacio es para darle un " toque foro " al blog. existirán muchos temas que seguramente se me escapen y, por ende, no postee al respecto, por omisión, olvido, desconocimiento, etc, etc. si esto sucediera (seguro que así será), dejo este espacio para que cada visitante pueda subir su duda o consulta sobre tópicos no tratados en mis post.