¿Cómo copiar datos de una fila a otra cada vez que cambien?

Tengo dos dos hojas en excel ("Presión" y "Temperatura") donde puedo ver los datos procedentes de un plc. En la hoja "Presión" tengo Fecha, hora, turno, Presión Alta, media, baja y de ciclo (celdas desde las a4 hasta la g4). Las presiones cambian cada dos segundos y la hora es dinámica. Quisiera que cada vez que cambien las presiones se copie en la misma hoja pero en la fila siguiente. Es decir, los datos en tiempo real los veo de a4 a g4 pero quiero un histórico, quiero adquirir o capturar los datos. Que se vayan copiando en a5:g5; a6:g6... Asi sucesivamente cada vez que cambien los valores.

1 respuesta

Respuesta
2

Esto lo puedes hacer controlando los cambios, pero primero debo saber como cambias los datos, es un programa el que los cambia, ¿tu lo hace manualmente=?

Los cambio no los controlo... Te explico; si quiero ver la temperatura de entrada en la celda A4 la formula que uso la siguiente formula: =RSLINX|Prensa!'VRBL_P[6],L1,C1'. Este link o variable del programa RsLinx me devuelve un valor como 205,4 pero este varía cada dos segundos automáticamente. El programa los cambia, yo quiero capturar los datos cada vez que cambien. Trabajo con Excel 2010.

Ok, en la hoja en donde tienes tus datos dale click derecho y escoge ver código, te aparecerá un hoja de vba, ahí pegale los siguientes códigos y mira si funciona:

Te digo mira si funciona, porque la verdad no se como modifica la celda el programa que utilizas. Pero espero que los códigos contemple lo que tu programa hace.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$4" Then
k = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Range("A" & k).Value = Range("A4").Value
Range("B" & k).Value = Range("B4").Value
Range("C" & k).Value = Range("C4").Value
Range("D" & k).Value = Range("D4").Value
Range("E" & k).Value = Range("E4").Value
Range("F" & k).Value = Range("F4").Value
Range("G" & k).Value = Range("G4").Value
End If
End Sub

La macro no me funcionó. Tengo una que encontré en una pagina. Funciona pero para una sola celda y tengo que darle a ejecutar macro por cada cambio. Trate de modificarla pero no se me dio:

Private Sub Worksheet_Calculate()

If Range("A4")<>ValorAnterior Then

Columns("A:G").AutoFit

ActiveSheet.Range("A4").Select

Do while selection.offset(fila, 0).Value<>""

fila = fila+1

Loop

Selection.Offset(fila, 0).value = Selection.Value

End if

ValorAnterior = Range("A4")

If selection.Column =1 Then 'Columna A

ActiveSheet.Cells(fila, 2).select

ActiveSheet.Cells(1,6).Select

End if

End sub

Si puede ayudarme a modificarla y me la puede explicar. No entiendo mucho estas macros. Agradezco de antemano.

Probemos una macro más, pégala en algún modulo de vba cierra el archivo y lo vuelves a abrír.

Me habías dicho que los datos se cambiaban cada dos segundos, esta macro empieza a copiar y pegar cada dos segundos la info que tengas en la fila 4, y se detiene en la fila 600, pero si quieres más info puedes ampliar, yo le puse 600 para darle un fin.

Sub Auto_open()
Call Copia_Pega
End Sub
Sub Copia_Pega()
Rows("5:5").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A5").Value = Range("A4").Value
Range("B5").Value = Range("B4").Value
Range("C5").Value = Range("C4").Value
Range("D5").Value = Range("D4").Value
Range("E5").Value = Range("E4").Value
Range("F5").Value = Range("F4").Value
Range("G5").Value = Range("G4").Value
k = Range("A" & Cells.Rows.Count).End(xlUp).Row
If k < 600 Then
Application.OnTime Now + TimeValue("00:00:02"), "Copia_Pega"
End If
End Sub

Hola! Ahora fue que pude probar y está funcionando!!! Excelente! El único problema es que mi libro tiene 7 hojas y quiero que funcione para una sola que se llama "P.-T.". Si me puede ayudar un poco más se lo agradezco... :D

Ok este sería el código:

Sub Auto_open()
Call Copia_Pega
End Sub
Sub Copia_Pega()

Sheets("P.-T.").Select
Rows("5:5").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A5").Value = Range("A4").Value
Range("B5").Value = Range("B4").Value
Range("C5").Value = Range("C4").Value
Range("D5").Value = Range("D4").Value
Range("E5").Value = Range("E4").Value
Range("F5").Value = Range("F4").Value
Range("G5").Value = Range("G4").Value
k = Range("A" & Cells.Rows.Count).End(xlUp).Row
If k < 600 Then
Application.OnTime Now + TimeValue("00:00:02"), "Copia_Pega"
End If
End Sub

No olvides finalizar la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas