Supongamos que tienes dos hojas: Hoja1 y Hoja2. Imagina que quieres evaluar cambios en la Hoja1, pero solo si afectan a la 1ª columna (columna A). Si se produce un cambio en esa columna, cogeremos los cinco últimos datos de la misma (si hay líneas vacías lo tendremos en cuenta).
Para ello, copia esto en la
Hoja1, no en un módulo (desde VBA):
Código:
Sub Worksheet_Change(ByVal Target As Range)
'si hay errores, que continúe
On Error Resume Next
'Ocultamos el procedimiento
'Application.ScreenUpdating = False
'si cambiamos algo de la columna A...
If ActiveSheet.Name = "Hoja1" And Target.Column = 1 Then
'copiamos los 5 valores del final a otra hoja
Range("A1").Select
'bajamos hasta el final de la columna
ActiveCell.SpecialCells(xlLastCell).Select
'recogemos el datos de las 5 últimas filas
If ActiveCell <> "" Then
'si la celda contiene datos, lo pasamos a una variable
dato1 = ActiveCell
Else
'si no hay datos, buscamos la celda con el último dato
Do While IsEmpty(ActiveCell)
ActiveCell.Offset(-1, 0).Select
Loop
dato1 = ActiveCell
End If
If ActiveCell.Offset(-1, 0) <> "" Then
dato2 = ActiveCell.Offset(-1, 0)
Else
Do While IsEmpty(ActiveCell.Offset(-1, 0))
ActiveCell.Offset(-1, 0).Select
Loop
dato2 = ActiveCell.Offset(-1, 0)
End If
If ActiveCell.Offset(-2, 0) <> "" Then
dato3 = ActiveCell.Offset(-2, 0)
Else
Do While IsEmpty(ActiveCell.Offset(-2, 0))
ActiveCell.Offset(-1, 0).Select
Loop
dato3 = ActiveCell.Offset(-2, 0)
End If
If ActiveCell.Offset(-3, 0) <> "" Then
dato4 = ActiveCell.Offset(-3, 0)
Else
Do While IsEmpty(ActiveCell.Offset(-3, 0))
ActiveCell.Offset(-1, 0).Select
Loop
dato4 = ActiveCell.Offset(-3, 0)
End If
If ActiveCell.Offset(-4, 0) <> "" Then
dato5 = ActiveCell.Offset(-4, 0)
Else
Do While IsEmpty(ActiveCell.Offset(-4, 0))
ActiveCell.Offset(-1, 0).Select
Loop
dato5 = ActiveCell.Offset(-4, 0)
End If
'llamamos al macro pegardatos
pegardatos
End If
'Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub
Ahora en un
módulo, copia esto:
Código:
Public dato1 As Variant
Public dato2 As Variant
Public dato3 As Variant
Public dato4 As Variant
Public dato5 As Variant
Sub pegardatos()
'vamos a la hoja2
Hoja2.Select
'pegamos los datos
Range("A1") = dato5
Range("A2") = dato4
Range("A3") = dato3
Range("A4") = dato2
Range("A5") = dato1
'volvemos a la hoja1
Hoja1.Select
End Sub
Saludos.
Edito, para colgar el ejemplo:
http://www.2shared.com/document/RecDDwxN/Ejemplo.html