Cómo ejecutar una macro en Excel cuando ciertas celdas cambien

Resumen

En Microsoft Excel, es posible crear una macro que solo se active al especificar un valor en una celda de una hoja determinada o en cualquier hoja que esté abierta en ese momento.

Tenga en cuenta, sin embargo, que no debe activar macros innecesariamente, ya que ralentizan el rendimiento de Excel.

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía, ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Se considera que está familiarizado con el lenguaje de programación que se muestra y con las herramientas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas. En muchos casos, una macro debe ejecutarse solo cuando un cierto número de celdas tienen valores introducidos en ellas (denominadas "celdas clave" en este documento). Para evitar que una macro grande se ejecute cada vez que se especifique un valor en una celda de una hoja, debe comprobar si ActiveCell es una de las celdas clave. Para ello, utilice el método de intersección en ActiveCell y el rango que contiene las celdas clave para comprobar que ActiveCell es una de las celdas clave. Si ActiveCell está en el rango que contiene las celdas clave, puede llamar a la macro.

Para crear la macro de Visual Basic:

  1. Haga clic con el botón derecho en la pestaña Hoja1 y luego haga clic en Ver código.

    Se abre la hoja del módulo detrás de Hoja1.

  2. Escriba el siguiente código en la hoja del módulo:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
    
    ' The variable KeyCells contains the cells that will
        ' cause an alert when they are changed.
        Set KeyCells = Range("A1:C10")
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
    
    ' Display a message when one of the designated cells has been 
            ' changed.
            ' Place your code here.
            MsgBox "Cell " & Target.Address & " has changed."
    
    End If
    End Sub
    
  3. Haga clic en Cerrar y volver a Microsoft Excel en el menú Archivo.

Al escribir en las celdas A1:C10 de la Hoja1, se muestra un cuadro de mensaje.