buenas tardes,
Estoy trabajando en una hoja de excel donde tengo una tabla de datos. Estos datos representan varias métricas de las que mi departamento quiere realizar un seguimiento. Siempre que alguien quiere completar la tabla con datos nuevos, los datos anteriores de las celdas se pierden.
¿Cómo puede alguien crear una hoja separada donde pueda almacenar todos los valores de esa tabla automáticamente? Quiero decir, cuando se realiza un cambio en una de las celdas de la tabla, ¿el nuevo valor se almacenará automáticamente en otra tabla que mantendrá todos los valores (antiguos y nuevos) de las celdas? Probé los "cambios de pista" pero no estoy seguro de si me gusta tanto.
¿Alguien conoce una forma más eficiente de hacer esto? ¿A través de una macro por ejemplo?
¡Gracias!
Respuesta1
(Estoy en el móvil, por lo que no puedo dar una respuesta muy detallada en este momento).
He escrito código exactamente para esto. Mi intención era realizar un seguimiento de todos los cambios en una hoja crítica editada por varios usuarios. Si hubiera una disputa sobre el origen de los datos, podría revisar el registro. Aquí hay piezas de VBA que le resultarán útiles.
Worksheet_Change
El evento se activará cada vez que se cambie la hoja de trabajo.
If Not Intersect(Target, Range("A1:G12")) Is Nothing
le dirá si las celdas que cambiaron están o no dentro de algún rango que le interese.
Es más rápido almacenar los valores que desea registrar en una matriz y establecer un rango en su hoja de registro para que sea igual a esa matriz en lugar de configurar cada celda en la hoja de registro individualmente.
Apuñala y mira hasta dónde llegas. Puedo ser un poco más detallado mañana.
Editar al día siguiente
Aquí hay un código que observará el rango A1:G12
en cualquier hoja que contenga el código. Si r
es la fila que se cambió, entonces el código copiará todo Ar:Gr
en una hoja cuyonombre clavees shtLog
. (El nombre del código es el nombre que se muestra en VBA, no el nombre en la pestaña que ve en Excel). Esto debería ayudarlo a avanzar en la dirección correcta.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer
Dim c As Integer
Dim arr(1 To 1, 1 To 12)
If Not Intersect(Target, Range("A1:G12")) Is Nothing Then
r = Target.Row
For c = 1 To 12
arr(1, c) = Cells(r, c).Value
Next
With shtLog
.Range(.Cells(.UsedRange.Rows.Count + 1, 1), .Cells(.UsedRange.Rows.Count + 1, 12)) = arr
End With
End If
End Sub
Respuesta2
La funcionalidad incorporada de "Seguimiento de cambios" probablemente será mucho más sólida que cualquier seguimiento de cambios que intente implementar con macros. Quédate con eso.
Respuesta3
Nosotros (descargo de responsabilidad, soy el fundador) creamos un sistema de seguimiento de auditoría para Excel (como lo que hace Google Docs, pero para Excel). No requiere un libro compartido y el registro de auditoría se guarda en una base de datos SQL local para que se pueda acceder a él desde cualquier libro y guardarlo como una hoja separada. Echar un vistazo:http://www.officeautomata.com
Respuesta4
Con la función Agregar de Sheetgo puede guardar y mantener un registro histórico de variables cambiantes en Excel. Más información en esta entrada de blog:https://blog.sheetgo.com/how-to-solve-with-sheetgo/track-changes-in-excel-files/(*descargo de responsabilidad: soy cofundador de Sheetgo).