Ejecutar macro automáticamente cuando se cambie el valor de una celda en un rango de datos (con fórmula)

Necesito una macro que analice el rango de datos AI4:AI77 y si estos cambian ejecutar la Macro1, este rango de datos es la suma de su fila correspondiente... He trabajado con change pero no me sirve para este caso y tengo una macro que solo analiza una celda, sería de gran ayuda!

¿Y además consultar como hacer si quiero que se ejecuten dos macros y no solo una?

2 Respuestas

Respuesta
1

Envíame tu archivo y me explicas con ejemplos qué quieres hacer en la hoja, es decir, cuáles celdas quieres modificar y qué debe ocurrir de forma automática; ya sea una macro o dos macros.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “daniela contreras” y el título de esta pregunta.

Estimado, creo que me explique un poco mal, te explicare nuevamente porque creo que no me entendiste bien, tengo el rango "AJ4:AJ77" que son formulas (la suma de cada fila, ejemplo la suma de E4:AI4 está en AJ4 , E5:AI5 en AJ5,.... y así) y necesito ejecutar una macro (Macro1) cuando cambie cualquiera de los valores de este rango (AJ4:AJ77).

Gracias, si me pudieras responder aquí sería de gran ayuda ya que me complica enviar el archivo excel. 

Muchas Gracias

Si en la celda AJ4 tienes esto:

=SUMA(E4:AI4)

Cuando tienes una fórmula en la celda AJ4; y el resultado de esa fórmula cambió, no se activa el evento Change de la hoja, ya que el valor de la celda sigue siendo:

=SUMA(E4:AI4)

Lo que cambió fue el resultado de la fórmula.


Entonces, hay que revisar los cambios en las celdas E4:AI4. Ahora, ¿en estas celdas tienes valores o fórmulas?

Si tienes valores, entonces la macro quedaría así, pon la siguiente macro en los eventos de tu hoja:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("E4:AI77")) Is Nothing Then
        Call macro1
    End If
End Sub

Si quieres ejecutar 2 macros:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("E4:AI77")) Is Nothing Then
        Call macro1
        Call macro2
    End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Estimado agradezco tu respuesta, pero el rango de celdas especificado es completamente una formula de suma() y hay algunas celdas que son las mismas que en otras hojas, por lo tanto su valor es =hoja1 celda A1 por ejemplo. 

Como se podría hacer en este caso?

Agradezco mucho tus respuestas!

Entonces supongo que modificas el dato en la hoja1 y la hoja de fórmulas se actualiza.

También supongo lo siguiente, entras a la hoja1, cambias un dato, ¿te vas a la hoja "fórmulas" y quieres que se ejecuten la macro1?

Pero entonces lo que hay que analizar es si modificas la hoja1 celda A1, ya que si modificas ese dato, estarás alterando el resultado en la hoja "fórmulas".

Pero también supongo que en la hoja "fórmulas" tienes referencias a muchas celdas y a varias hojas, entonces tendrías que poner macros en los eventos de todas las hojas.

No sé, como no entiendo cómo tienes los datos, solamente puedo estar suponiendo y suponiendo, y tal vez no llegar a nada.

Lo que te ofrezco es lo siguiente, cada vez que seleccionas la hoja "fórmulas" que se ejecute la macro1.

Borra las otras macros y deja solamente esta macro en los eventos de la hoja "fórmulas"

Private Sub Worksheet_Activate()
    Call macro1
End Sub

Entonces, harás cambios en las demás hojas y cuando selecciones la hoja "fórmulas" se ejecutará la macro1

Estimado, hice envío de un mail con más información para que me ayudes! Gracias

La macro deberá ir en los eventos de thisworkbook

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Por.Dante Amor
    Select Case Sh.Name
        Case "01"
            If Not Intersect(Target, Sh.Range("B2:B3")) Is Nothing Then
                Call macro1
            End If
        Case "02"
            If Not Intersect(Target, Sh.Range("B2:B3")) Is Nothing Then
                Call macro1
            End If
        Case "03"
            If Not Intersect(Target, Sh.Range("B2:C45")) Is Nothing Then
                Call macro1
            End If
    End Select
End Sub

sal u dos

Respuesta

https://www.youtube.com/watch?v=Jw8fmqTyUDk 

Mira ese ejemplo se ajusta a lo que necesitas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas