¿Macro para registrar datos de una hoja a otra?

Quisiera por favor que alguien me ayude con una macro que pueda registrar datos de una hoja a otra. Por ejemplo ingreso datos en una hoja, y pongo peras, manzanas, duraznos en el rango C10 a C12 y sus cantidades en E10 a E12, ademas de la fecha, un código, y un nombre en celdas G6, G4 y C5 respectivamente, al ejecutar la macro me copie esos datos a otra hoja llamada "Registro" en una misma fila en diferentes columnas, el resultado en la hoja registro seria: empezando en la fila 6 en la columna A el código, columna B la fecha, columna C el nombre, columna E peras, columna G cantidad. Luego me copia en la fila 7 lo mismo pero con las manzanas y en la 8 con los duraznos. Ahora si creo otra hoja con el mismo formato, e ingreso otros datos: platanos, manzanas, uvas, duraznos, piñas y sus cantidades (en este caso sus rangos serian de C10 a C14 y de E10 a E14, la fecha, código y nombre en las mismas celdas) al ejecutar la macro me registre de la misma manera en la hoja "Registro" debajo de lo que ya estaba registrado (es decir empezando en la fila 9).

1 respuesta

Respuesta
2

H o l a: Te anexo la macro. Cambia "Hoja1" por el nombre de tu hoja que contiene los datos

Sub Registrar()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Registro")
    If h1.[G4] = "" Then
        MsgBox "Falta el código"
        Exit Sub
    End If
    If h1.[G6] = "" Then
        MsgBox "Falta la fecha"
        Exit Sub
    End If
    If h1.[C5] = "" Then
        MsgBox "Falta el nombre"
        Exit Sub
    End If
    If h1.[C10] = "" Then
        MsgBox "No hay datos a registrar"
        Exit Sub
    End If
    '
    f = 10
    u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
    If u < 6 Then u = 6
    Do While h1.Cells(f, "C") <> ""
        h2.Cells(u, "A") = h1.[G4]
        h2.Cells(u, "B") = h1.[G6]
        h2.Cells(u, "C") = h1.[C5]
        h2.Cells(u, "E") = h1.Cells(f, "C")
        h2.Cells(u, "G") = h1.Cells(f, "E")
        u = u + 1
        f = f + 1
    Loop
    h1.Range("C10:C" & f - 1 & ",E10:E" & f - 1) = ""
    MsgBox "Datos registrados"
End Sub

Al finalizar la macro, te borra los registros de la C10 y de la E10 en adelante, si no quieres que te los borre, entonces quita la siguiente línea de la macro:

h1.Range("C10:C" & f - 1 & ",E10:E" & f - 1) = ""
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias! Funciona a la perfección. Sólo una pregunta más, en mi hoja, en la celda de fecha, la pongo con un calendario desplegable, y al ejecutar la macro, me registra con un número, por ejemplo, con el calendario pongo 25/01/2017 y en el registro aparece 42760  ¿porqué será? 

Es por el formato de la celda, seguramente lo tienes en General, cambia el formato de la columna a formato de fecha.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas