Detectar el cambio en una celda de Excel

Podemos detectar el cambio en una celda de Excel a través del evento Worksheet_Change en VBA donde podremos indicar el código que se ejecutará  al momento de descubrir una modificación en alguna celda o rango de nuestra hoja.

Accediendo el evento Worksheet_Change

Existen dos métodos para acceder a este evento.

1) Hacer clic derecho en el nombre de la hoja de Excel y seleccionar la opción Ver código.

Detectar el cambio en una celda de Excel

2) Abrir el Editor de VBA y dentro del Explorador de proyectos hacer doble clic sobre el nombre de la hoja.

Detectar cambio en celda de Excel

Posteriormente debemos seleccionar de las listas desplegables las opciones Worksheet (en la primera lista) y la opción Change (en la segunda lista).

Cómo detectar el cambio en una celda de Excel

El Editor de VBA desplegará el código respectivo para el evento Worksheet_Change y podremos escribir nuestro código dentro de la subrutina provista.

El argumento Target del evento Worksheet_Change

Nuestro evento tiene definido un argumento llamado Target el cual contendrá la celda que ha sido modificada. Para mostrar el valor de dicho argumento podemos utilizar siguiente código:

Detectar cambios realizados en una celda de Excel

Cada vez que realices una modificación a una celda y pulses la tecla Entrar se mostrará el mensaje siguiente:

Cómo detectar automáticamente la celda que ha cambiado en Excel

Cómo detectar el cambio en una celda de Excel

A continuación haremos dos ejemplos donde aprenderemos cómo detectar el cambio en una celda de Excel utilizando el evento Worksheet_Change en VBA. El primer ejemplo me permitirá  proteger el contenido de la celda A1 de manera que si detecto cualquier cambio en la celda volveré a colocar el número 3.141592654 el cual es su valor original.

Macro para detectar el cambio de una celda en Excel

De esta manera la celda A1 siempre tendrá el valor numérico 3.141592654 sin importar las veces que intente modificar su valor. La clave en este código es comparar la propiedad Address para saber si efectivamente se trata de la celda A1 y en caso de ser verdadero asignar el valor a Target.

El segundo ejemplo que mostraré nos ayuda a detectar el cambio en un rango de celdas. Supongamos que en el rango A1:A10 quiero monitorear el valor introducido en cada celda y colocar el número de la vocal que se ha introducido. De esta manera, si se introduce la letra A se remplazará por el valor 1. Si se introduce la letra E se remplazará por el valor 2 y así sucesivamente. El código para lograr este comportamiento en la hoja es el siguiente:

Detectar el cambio de un rango en Excel

La función Intersect nos ayuda a saber si existe alguna coincidencia entre el valor de Target y el rango A1:A10 en cuyo caso se evaluará el valor de Target para saber si es una vocal y entonces hacer el remplazo necesario.

De manera que puedas comprobar por tu propia cuenta los ejemplos que he mostrado en esta ocasión, puedes descargar el libro de trabajo y hacer pruebas con el código. Recuerda que el evento Woorksheet_Change en VBA es de gran utilidad cuando necesitamos detectar el cambio en una celda de Excel de manera que podamos tomar las acciones adecuadas.

Artículos relacionados
Eventos en VBA