Como copiar campo de hoja excel a otra hoja, mismo libro, en el mismo campo pero en distinto rango.

Necesito copiar varios campos de una hoja excel a otra hoja dentro del mismo libro, teniendo en cuenta que el campo destino no va estar en el mismo rango que el de origen.

No sé como buscar la dirección del campo destino donde se han de pegar todos los valores del campo de origen.

Si por favor alguien me puede dar una idea.

1 respuesta

Respuesta
1

Siguiendo con la idea anterior, tu destino es la hoja Acumulados y hay varios métodos para buscar la primer celda libre si a eso te refieres.

La más común es buscar desde abajo la primer celda libre de la col que necesariamente tenga datos, en tu caso es la col A (fecha). Por ej:

finx = sheets("Acumulados").Range("A" & rows.count).end(xlup).Row + 1

Y luego el pegado lo realizarás a partir de Range("A" & finx)

Voy a colocarlo en tu libro y te lo estaré enviando en un momento.

Si lo que necesitas es 'ubicar' la col donde debe ser pegada la col de origen, esta macro realiza esto:

-Recorre la col de títulos en origen

-Busca el mismo título en destino... si no lo encuentra envía mensaje de error y continúa con el resto de las col. Luego puedes pegar los datos de esa col manualmente.

- En las 2 hojas se establece el fin de rango en variables para ser utilizadas en cada pase.

Sub Traspaso()
'x Elsamatilde
Dim filx As Long, UltLinea As Long, colx As Integer
Dim titulo As String
Dim busco
'obtengo la primer fila libre para este mes en hoja Acumulados
filx = Sheets("Acumulados").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Hoja de trabajo").Select
'obtengo la última fila ocupada en esta hoja
UltLinea = Range("A" & Rows.Count).End(xlUp).Row
'por cada col de Hoja de trabajo se busca su igual en hoja Acumulados
For colx = 1 To Range("A1").End(xlToRight).Column
    titulo = Cells(1, colx)
    Set busco = Sheets("Acumulados").Rows("1:1").Find(titulo, LookIn:=xlValues, lookat:=xlWhole)
    'si no lo encuentra envía un mensaje y sigue con el resto de las col (ver nota)
    If busco Is Nothing Then
        MsgBox "No se encontró el título " & titulo & " en hoja Acumulados, se sigue con el resto", , "ERROR"
    Else
        'copia el rango y lo pega en la col encontrada y en la primer fila para este mes
        Range(Cells(2, colx), Cells(UltLinea, colx)).Copy _
        Destination:=Sheets("Acumulados").Cells(filx, busco.Column)
    End If
    'vacío la variable
    Set busco = Nothing
Next colx
'fin del pase
Sheets("Revisión Encabezados").Select
Columns("b:b").Delete
Sheets("Resumen Nómina").Cells.Delete
Sheets("Hoja de trabajo").Select
Sheets("Hoja de trabajo").Range("a2:az120").Cells.Delete
'EM: para posicionarse en la última fila es más simple esta línea
Sheets("acumulados").Select
Range("A" & Range("A" & Rows.Count).End(xlUp).Row).Select
End Sub
'nota: como ya habías controlado los títulos quizás nunca se llegue a esta instancia
'pero te dejo la idea porque este código es más efectivo que el  Cells.Find(....).Select

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas