Como trasladar datos cambiantes a la otra hoja

En la Hoja 1 de Excel tengo 2 celdas “AT3” y “AT11” que reflejan datos que son fruto de fórmulas sencillas.

¿Cómo podría hacer para que Excel me lleve automáticamente el dato de “AT3” (Hoja 1) a la celda “B2” (Hoja 2) de ese mismo libro y que cuando el dato cambie en “AT3” ponga el nuevo dato en “C2” (Hoja 2), cuando cambie de nuevo lo ponga en “D2”(Hoja 2) y así sucesivamente?

Lo mismo necesitaría hacer con los datos de “A11” pero esta vez llevados a la fila 4 de la Hoja 2 (“B4”,”C4”,”D4”…)

Quizás con un ejemplo grafico quede más claro lo que necesito.

Si en la Hoja 1 salen estos datos tras hacer tres operaciones diferentes:

La Hoja 2 los reflejaría así:

De tal modo que pueda hacer una comparativa de los datos acumulados en la Hoja 2.

1 Respuesta

Respuesta
1

Alt+F11 para acceder a la ventana de VBA, doble clic en Hoja1 del explorador de la izquierda, pega este código:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim h1 As Worksheet
Dim h2 As Worksheet
Dim p As Range
Dim turango1 As String
Dim turango2 As String
'tus nombres de hojas
Set h1 = Hoja1
Set h2 = Hoja2
'tus posiciones a controlar los cambios
turango1 = "$AT$3"
turango2 = "$AT$11"
If Target.Address = turango1 Then
    Target.Copy
    h2.Select
    Set p = h2.Cells(2, 2)      'celda de destino inicial, (B2)
    p.Select
    Do While Selection.Value <> ""
      Selection.Offset(0, 1).Select
    Loop
    Selection.PasteSpecial xlPasteAll
End If
If Target.Address = turango2 Then
    Target.Copy
    h2.Select
    Set p = h2.Cells(4, 2)  'celda de destino inicial, (B4)
    p.Select
    Do While Selection.Value <> ""
      Selection.Offset(0, 1).Select
    Loop
    Selection.PasteSpecial xlPasteAll
End If
h1.Select
Application.ScreenUpdating = True
End Sub

Gracias por tu tiempo.

He hecho lo que me dices y al intentar trabajar me ha salido esto:

No sé que hacer.

Algo ha pasado, fíjate que lo único que te tiene que quedar en la ventana de código de la hoja1 es lo que te he pasado. Al parecer, por algún motivo, se te ha duplicado la línea que te da error; te aparece arriba de todo y casi abajo de todo. Debes eliminar esta línea y la siguiente "End sub"

Hola, creo que el error fue mío al copiar.

He probado el código que me envías y funciona bien pero hay un problema:

Si yo escribo un numero en AT3 y pulso ENTER o acciono con el ratón cualquier celda de al lado lo hace perfectamente pero si el número es fruto de un formula no hace nada.

Te explico: en AT3 hay una fórmula que es =F4*5. Como te decía en la pregunta “AT3 y AT11 reflejan datos fruto de fórmulas sencillas”

Si yo escribo el 5 en F4, en AT3 aparecerá 25 y lo llevará a B2, Hoja 2; si escribo el 10 en F4, en AT3 aparecerá 50 y lo llevará a C2, Hoja 2, y así sucesivamente.

Pero debe hacerlo solo con que el número en AT3 cambie, cada número que aparezca en AT3 debe ser trasladado automáticamente a la fila 2 de la Hoja 2.

Yo lo tengo claro en mi cabeza pero al explicarlo puede resultar confuso.

Espero tu respuesta

Gracias

Un saludo

Ah correcto, fallo mío. Lo explicaste correctamente de entrada.

Entonces la solución pasa por modificar en el código donde se definen las variables "turango".. es decir, si cuando se produce un cambio en la celda F4 este repercute en la celda AT3...

Modifica esto:

turango1 = "$AT$3"
turango2 = "$AT$11"

Por esto otro:

turango1="$F$4"

Lo mismo con la referencia de la fórmula que tienes en AT11 si es posible. Si la fórmula de AT11 hace referencia a más celdas o tienes cualquier otra duda lo comentamos.

Perdón, hay más a modificar, ahora te pego la macro actualizada..

Aquí lo tienes actualizado:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim h1 As Worksheet
Dim h2 As Worksheet
Dim p As Range
Dim turango1 As String
Dim turango2 As String
'tus nombres de hojas
Set h1 = Hoja1
Set h2 = Hoja2
'tus posiciones a controlar los cambios
turango1 = "$F$4"
turango2 = "$AT$11"     'ojo! aquí debes modificar con tu referencia
If Target.Address = turango1 Then
    h1.Cells(3, 46).Copy
    h2.Select
    Set p = h2.Cells(2, 2)      'celda de destino inicial, (B2)
    p.Select
    Do While Selection.Value <> ""
      Selection.Offset(0, 1).Select
    Loop
    Selection.PasteSpecial xlPasteValues
End If
If Target.Address = turango2 Then
    h1.Cells(11, 46).Copy
    h2.Select
    Set p = h2.Cells(4, 2)  'celda de destino inicial, (B4)
    p.Select
    Do While Selection.Value <> ""
      Selection.Offset(0, 1).Select
    Loop
    Selection.PasteSpecial xlPasteValues
End If
h1.Select
Application.ScreenUpdating = True
End Sub

Sólo tienes que modificar el valor de la variable "turango2"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas