Macro que copie una Columna tomando como criterio "Hasta la ultima fila con datos de la columna de al lado"

Tengo una base de datos (Imagen), lo que necesito es una macro que me copie las columnas en rojo,(sin el titulo) hasta la ultima fila de la columna A que contenga datos, y que me pegue la selección en una nueva hoja (específicamente la celda C1).

En otras palabras, y usando la imagen como referencia, necesito que se copien las columnas "D, F Y H" hasta la fila 31 pues es la ultima fila con datos de la columna A.

Esa selección se debe pegar en "HOJA 2" celda "C1"

De antemano, muchas gracias

2 respuestas

Respuesta
2

Te anexo la macro, cada que la ejecutes te creará una hoja nueva.

Sub Macro9()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets.Add(after:=Sheets(Sheets.Count))
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range("D2:D" & u & ",F2:F" & u & ",H2:H" & u).Copy h2.Range("C1")
End Sub

sal u dos

Dante, tu macro me ha servido mucho, pero algo que no especifiqué en la pregunta fue que necesito que todo quede en una sola columna.

Si pudieras ayudarme sería genial.

Te anexo la macro actualizada.

Sub Macro9()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets.Add(after:=Sheets(Sheets.Count))
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    H1.Range("D2:D" & u). Copy h2. Range("C1")
    H1.Range("F2:F" & u). Copy h2.Range("C" & h2.Range("C" & Rows. Count).End(xlUp).Row + 1)
    H1.Range("H2:H" & u). Copy h2.Range("C" & h2.Range("C" & Rows. Count).End(xlUp).Row + 1)
End Sub

Si ya no tienes dudas, podrías cambiar la valoración a la respuesta.

Respuesta
2

No explicas si quieres la copia en columnas seguidas o bien si quieres que los datos se copien uno abajo de otro, así que te pongo dos ejemplos de macros uno de cada uno

Sub copiar()
Set origen = Worksheets("hoja1").Range("a1").CurrentRegion
With origen
    cuenta = WorksheetFunction.CountA(origen.Columns(1))
     c = .Columns.Count
     Set origen = .Resize(cuenta, c)
    Set destino = Worksheets("hoja2").Range("c1").Resize(cuenta, 3)
End With
With destino
    .Columns(1).Value = origen.Columns(4).Value
    .Columns(2).Value = origen.Columns(6).Value
    .Columns(3).Value = origen.Columns(8).Value
End With
End Sub
'
'
Sub copiar_abajo()
Set origen = Worksheets("hoja1").Range("a1").CurrentRegion
With origen
    cuenta = WorksheetFunction.CountA(origen.Columns(1))
     c = .Columns.Count
     Set origen = .Cells(2, 1).Resize(cuenta - 1, c)
    Set destino = Worksheets("hoja2").Range("c1").Resize(cuenta, 1)
End With
With destino
    For i = 1 To 3
        If i = 1 Then .Value = origen.Columns(4).Value
        If i > 1 Then
            Set destino = .Rows(.Rows.Count + 1).Resize(cuenta, 1)
            If i = 2 Then .Value = origen.Columns(6).Value
            If i = 3 Then .Value = origen.Columns(8).Value
        End If
    Next i
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas