Ejecutar macros al seleccionar celdas en Excel

En este artículo veremos y entenderemos cómo escribir una macro para que cuando se seleccione una celda en Excel se ejecute una macro. Incluso veremos cómo adecuar el código de la macro para que podamos elegir celda no adyacentes, es decir, que no sean del mimos rango, sino de rangos diferentes.

TipEn resumen, usaremos el evento SelectionChange para detectar cuando se seleccione una celda, y con el método Insersect detectaremos si la celda elegida cruza con el rango que definimos en la macro.

Entendiendo el evento SelectionChange

Los eventos se ejecutan cuando sucede algo en Excel. Una hoja de cálculo tiene, entre otros eventos, el evento SelectionChange que ejecutará una macro al haber una cambio en una celda, por ejemplo cuando se selecciona una celda o se presiona [Enter] después de ingresar una fórmula o un valor en una celda.

Entendiendo el Método Intersect

El método que usaremos en nuestro código vba es el método Instersect, la cual nos ayudará a indicarnos si se da una intersección entre rangos, y para nuestro ejemplo si el rango elegido intersecta con el rango elegido.

Ver video Ejecutar macro al seleccionar celda en Excel

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Mostrar mensaje al elegir una celda en Excel

En la Figura 1 tenemos 3 rangos donde deseamos que al elegir cualquier celda de ellos, se lance un mensaje.

Se mostrará un mensaje al elegir alguna celda de fondo azul.

Figura 1. Se mostrará un mensaje al elegir alguna celda de fondo azul.

Lo primero que debemos hacer es definir el lugar donde escribiremos la macro. El lugar de la macro será en un Módulo de hoja:

  • Damos clic derecho en la pestaña de la Hoja1 (o que aplique a tu archivo).
  • Se mostrará el Módulo de la Hoja1 para escribir la macro.
  • Desplegamos el Combo donde dice (General) y elegimos Worksheet.

Al elegir Worksheet se insertará automáticamente una macro donde se manda a llamar al evento SelectionChange. La macro es la siguiente:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

El evento SelectionChange detectará cambios en la Hoja1.

Figura 2. El evento SelectionChange detectará cambios en la Hoja1.

Ahora, en el evento SelectionChange le diremos a Excel que si elegimos alguna celda del rango “A10:A17” se ejecute un mensaje. Como vimos anteriormente, lo haremos con el método Intersect.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim CeldaActual As String
    
    CeldaActual = ActiveCell.Address
    
    'Si se elige una celda entre el rango A10:A17
    If Not Intersect(Target, Range("A10:A17")) Is Nothing Then
    
        'Se muestra un mensaje indicando la celda elegida
        MsgBox "Has seleccionado la celda " & CeldaActual, vbInformation, "EXCELeINFO"
    
    End If

End Sub

Ahora bien si deseamos que los rangos sean no adyacentes, entonces modificaremos la siguiente línea definiendo varios rangos:

'Si se elige una celda entre el rango A10:A17, B10 y D10:D21
If Not Intersect(Target, Range("A10:A17, B10, D10:D21")) Is Nothing Then

Mostrar mensaje al elegir celda de Excel

Figura 3. Mostramos mensaje al elegir una celda de Excel.

Referencias

En todos estos artículos hemos usado el método Intersect.

Descargar el ejemplo

Descargar el ejemplo EXCELeINFO – Ejecutar macros al seleccionar celdas en Excel.zip

You may also like...