martes, 4 de marzo de 2014

Resaltar celda activa sin macros.

Hace ya algunos años mostré cómo, con una macro, podíamos resaltar la celda activa en cada momento (ver).
En la entrada veremos como llegar a un resultado similar empleando el Formato Condicional y la función CELDA, FILA y COLUMNA.

En particular conseguiremos resaltar nuestra celda activa dentro de un rango concreto de celdas, por ejemplo C2:E11.
En primer lugar seleccionaremos dicho rango y accederemos a la herramienta Formato Condicional con fórmula, donde introduciremos:
=Y(FILA()=CELDA("fila");COLUMNA()=CELDA("columna"))

Resaltar celda activa sin macros.


Con la función CELDA("fila") o CELDA("columna") conseguimos información, al omitir su segundo argumento, especificada en el primer argumento 'tipo_de_info' (fila o columna en nuestro ejemplo) para la última celda cambiada.
Mientras que con FILA() y COLUMNA() obtenemos datos sobre la celda activa...

La lectura de la condición del formato condicional sería entonces que cuando la celda activa coincida en su FILA y COLUMNA con la última celda cambiada, resalte con el formato dado... precisamente lo que pretendemos.


Ya hemos acabado, podemos probar a seleccionar una celda dentro de nuestro rango formateadas.. veremos que tras cada selección y posterior actualización (presionando tecla de función F9) nuestra celda activa resalta con el formato dado...

Claro está que esta forma de trabajar no es la más cómoda, y para evitar ser nosotros manualmente quienes actualicemos nuestra hoja, para que refresque, y el formato condicional actué automáticamente, podríamos incluir una simple línea de código asociado a nuestra hoja de trabajo.

Por tanto accedemos al editor de VB desde el botón derecho del ratón sobre la etiqueta de hoja, seleccionando Ver código, donde seleccionaremos el evento _SelectionChange y el código a añadir será:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = True
End Sub

10 comentarios:

  1. Hola. Me gustaría que me ayudaras con la duda que tengo.
    Tengo la siguient columna de valores (siendo la celda "Resultado" el valor que quiero obtener):

    Real Real
    32,00 32,00
    15,00 15,00
    12,00 0,00
    0,00 0,00
    Resultado 1 Resultado 2



    Necesito una formula que me devuelva en la celda donde pone Resultado el primer valor distinto de cero empezando desde abajo, es decir, en la columna de la izquierda me devolvería el valor 12,00, y en la de la derecha me devolvería el valor 15,00.

    Muchas gracias por tu ayuda

    ResponderEliminar
    Respuestas
    1. Hola,
      bajo el supuesto que planteas, esto es los ceros están al final del listado (todos juntos) y comenzamos en la fila 2 de la hoja:
      puedes aplicar la siguiente fórmula
      =INDIRECTO(DIRECCION(COINCIDIR(0;A2:A5;0);COLUMNA()))

      Espero te sirva
      Saludos cordiales

      Eliminar
    2. Hola,
      Casi me sirve. Es decir, con la fórmula que me propones me devuelve el valor de la celda A4 o B3 (en el ejemplo del que hablamos). Yo el valor que necesito es el de la fila anterior. En nuestro ejemplo: A3 o B2. Es decir, el primer valor distinto de 0 empezando desde abajo.

      Intentaré explicarte mi objetivo (espero explicarme bien y no liarlo mas).
      La tabla en la que trabajo es un inventario. Yo tengo una tabla con 2 columnas: en la A tengo un calendario mensual, y en la columna B la cantidad de producto, que voy anotando dia a dia. En la ultima celda de lacolumna B, quiero que me aparezca el inventario actualizado, es decir, si estamos a día 15, el inventario del dia 15, y si estamos a dia 23, el inventario del dia 23.
      Espero haberme explicado bien.

      Muchas gracias por tu ayuda

      Eliminar
    3. Bueno,
      la fórmula es buena, en todo caso habrá que ajustar dónde comienzan los datos..
      como te indicaba si los datos están en el rango (para el ejemplo planteado al inicio) en A1:B5, comenzando los importes en la fila 2, la fórmula propuesta

      =INDIRECTO(DIRECCION(COINCIDIR(0;A2:A5;0);COLUMNA()))

      te devolverá el importe correspondiente a A4 y B3, como indicabas al principio, las celdas que corresponden al importe 12 de la columna A y 15 de la columna B, es decir, el primer importe diferente de cero comenzando por abajo...
      si tus datos están en otra localización de filas, tendrías que ajustarlo donde pone COINCIDIR sumándole o restándole una cantidad según corresponda.

      Espero te sirva.
      Saludos y suerte!!

      Eliminar
    4. Ya lo he ajustado como me has dicho, pero me encuentro con otro problema.
      En el mismo ejemplo, si tengo los siguientes datos:

      Real
      32,00
      0,00
      0,00
      8,00
      0,00
      Resultado

      Con la fórmula que me has propuesto, el resultado que me devuelve es 32, yo necesito que el resultado sea 8.

      Muchas gracias de nuevo, y disculpa las molestias

      Eliminar
    5. Correcto, como te indicaba en la primera respuesta esa fórmula funcionaba bien bajo la hipótesis que todos los ceros están en la parte inferior.. es decir, encuentra el primer cero (de arriba abajo) y devuelve el valor justo encima.

      Es muy importante, al consultar, trasmitir lo más ajustado a la realidad del caso, ya que las respuestas pueden ser muy diferentes... obviamente a condiciones distintas soluciones diferentes.

      Buscaré una respuesta, pero me parece que bajo estas nuevas condiciones necesitarás una UDF-función personalizada en VBA...

      Saludos

      Eliminar
  2. Hola, que tal?

    Muy bueno el ejemplo, practicamente lo que busco.

    Una duda:

    Como se podría resaltar:

    1) Toda la fila de la celda seleccionada.
    2) Toda la fila y columna de la celda seleccionada.

    Otra consulta:

    Cuando quiero guardar me advierte que este tipo de archivos hay que guardarlos como habilitados para macros.

    Se estaría trabajando con macros cuando se agrega algo en VB?

    Gracias!

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola Aaron,
      para resaltar la fila y/o columna puedes emplear lo que aquí se describe:
      http://excelforo.blogspot.com.es/2010/10/macro-vba-cambio-color-y-tamana-celda.html

      Efectivamente cuando introducimos programación en el editor de VB (macros) el libro hay que guardarlo como habilitado para macros...
      Saludos

      Eliminar
  3. HOLA UNA PREGUNTA,CUAL SERIA LA LINEA A ESCRIBIR EN EL FORMATO CONDICIONAL PARA SELECCIONAR UNA CELDA FIJA DE LA COLUMNA Y OTRA CELDA FIJA DE LA FILA. EJEMPLO SI EL RANGO ES B2:C10 AL ESTAR SELECCIONADA B2 DAR FORMATO CONDICIONAL A B1 Y A2

    ResponderEliminar
    Respuestas
    1. Hola,
      tendrías que aplicar dos formatos a dos rangos distintos, descomponiendo la regla mostrada más arriba en el post.
      Primero seleccionando el rango A2:A10 con la fórmula en el FC:
      =FILA()=CELDA("fila")
      y luego en B1:C1 con
      =columna()=celda("columna")

      Saludos

      Eliminar