Macro para ver los últimos registros

Sres y Sritas, estoy buscando un codigo que me permita ver los ultimos cinco registros capturados.

Voy a adjuntar una imagen para explicarme mejor

Tengo ese botón que dice GUARDAR NOMBRE, y eso hace que el nombre en E1 se guarde en la columna G.

En la columba B, ocupo me muestre los ultimo cinco registros del nombre.

PERO no busco que los tome de esa columna G, sino que la macro tenga 5 variables y que se vayan recorriendo o actualizando es decir, que si ejecuto la macro guarde el ultimo nombre capturado en la variable NOM5, y en la NOM4 estará el anterior y así sucesivamente, NOM3... NOM2... NOM1...

2 Respuestas

Respuesta
1

Lo tuyo es facli mira la imagen, en alimagen la macro toma los 5 últimos datos que vayas capturando y los pasara a la columna B a partir fila 2, luego guarda estos últimos 5 datos dentro de la misma hoja en una contenedor de memoria llamado NOM el cual ves en la pantalla, dicho contenedor lo puedes mandar llamar desde cualquier hoja o cualquier macro,

Y esta es la macro, es todo el código que ocupas, en la segunda macro (test) es un ejemplo de como llamar las variables almacenadas desde otra macro, estas seran reemplazadas por los ultimos 5 datos que captures o con que solo captures un dato

Private Sub CommandButton1_Click()
With Range("g1")
    filas = .CurrentRegion.Rows.Count
    nom = .Rows(filas - 5 + 1).Resize(5)
    .Rows(filas - 5 + 1).Resize(5).Name = "NOM"
End With
Range("b2").Resize(5, 1).Value = nom
End Sub
'
Sub test()
Set nom = Range("nom")
For i = 1 To 5
    nombre = nom.Cells(i)
    MsgBox ("variable NOM(" & i & ") " & nombre), vbInformation, "AVISO"
Next i
Set nom = Nothing
End Sub
Respuesta
1

No se si lo quieres estrictamente con esas variables que mencionas, pero te hice una Función de Array. (estas formulas se entran con CTR + SHIFT + ENTER)

Solo tienes que copiar el siguiente código en un modulo:

Public Function UltimosCinco(Col As Range) As Variant
Application.Volatile
Dim RngAdr As String: RngAdr = Col.Address(False, False)
Dim RngCol() As String: RngCol = Split(RngAdr, ":")
Dim uF As Long
Dim AbsoluteColumn As String
Dim i As Integer, x As Integer, Quinto As Integer
Dim LastFive(5) As String
With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "[0-9]"
AbsoluteColumn = .Replace(RngCol(1), "")
End With
uF = Range(AbsoluteColumn & Rows.Count).End(xlUp).Row
Quinto = uF - 4
If uF >= 6 Then
    For i = Quinto To uF
        LastFive(x) = Cells(i, Col.Column).Value
        x = x + 1
    Next i
    UltimosCinco = Application.Transpose(LastFive)
ElseIf uF > 1 Then
    For i = 2 To uF
        LastFive(x) = Cells(i, Col.Column).Value
        x = x + 1
    Next i
    UltimosCinco = Application.Transpose(LastFive)
Else
    UltimosCinco = ""
End If
End Function

Y luego usar la función en la hoja, en las celdas donde quieres que aparezcan los últimos 5 nombres.

Debes seleccionar las 5 celdas y escribir la función =UltimosCinco(Rango) y presionar CONTROL + SHIFT + ENTER para generar la formula de Array.

Te grabé un vídeo haciéndolo por si no se entiende la explicación escrita: video demo

Andy

Gracias Andy, ya duermete jajaja no se si estas en Mexico o donde aca en Mexico es casi la 1 am, mañana acoplo este codigo a mi archivo, Gracias

Gracias por tu respuesta, la he adaptado al archivo.

De nada. Te recomiendo este tipo de funciones por encima de otras macros como la de la otra respuesta, ya que las UDF son volátiles y dependen de lo que pase en la hoja, no de lo que tu estés obligado a hacer, a parte de que son mas completas y a prueba de errores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas