Macro de Excel para copiar celdas de una columna en un rango variable

Escrito por el Sunday 9 de January de 2011 y archivado como Portada. Puedes seguir los comentarios por medio de RSS 2.0. Participa dejando un comentario y no olvides hacerlo siempre con respeto ya que aparecen publicados automáticamente. Lecturas: 13220

Esta macro inicia desde una fila y cuenta las filas con datos hasta que encuentra una celda vacía, luego copia esas celdas y las pega transpuestas en la columna de a la par.

Ejemplo:

Supongamos los siguientes datos:

Carlos Fuentes
La fiesta del chivo
ISBN
Website

Gabriel García Márquez
Cien años de soledad
ISBN
Website
Email

Mario Vargas Llosa
Los jefes
ISBN
Website
Email
Teléfono

Como podemos observar cada registro tiene un número variable que determina el rango a seleccionar y copiar (4, 5 y 6 respectivamente).


Sub SaveSolutions()
Dim band As Boolean
Dim count As Long
Dim cont As Integer
Dim a, b As Integer
band = True
a = 2 'controla renglones (indica que inicia en la fila 1)
b = 2 'controla renglones (indica que inicia en la fila 1)
count = 0 'inicia el contador en cero

Do
'Nombre de la hoja donde van los datos
Sheets("Hoja1").Select
Do
Cells(a, "A").Select
' Inicia el loop hasta que encuentre una celda vacía en la fila de la columna
Do Until IsEmpty(ActiveCell) And IsEmpty(ActiveCell.Offset(0, 1))
' Se detiene hasta que encuentre dos filas vacías consecutivas
ActiveCell.Offset(1, 0).Select
count = count + 1
Loop
If Cells(a, "A") <> "" Then
Range(Cells(a, "A"), Cells(a + count, "A")).Select
Application.CutCopyMode = False
Selection.Copy
'Nombre de la hoja en donde se pegarán los datos
Sheets("Hoja1").Select
'La varible b controla las filas en donde se pegarán los valores transpuestos
Cells(b, "B").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
a = a + count + 1
b = b + 1
cont = 0
count = 0
Else
a = a + count
cont = cont + 1
End If

'este if controla los espacios vacíos si hay más de 2 filas continuas sin datos
'indica que ya no hay más datos para copiar en la columna y termina el proceso
If cont >= 2 Then
band = False
End If
Loop While band = True
Loop Until IsEmpty(ActiveCell) And IsEmpty(ActiveCell.Offset(0, 2))

End Sub

Blog Widget by LinkWithin

4 Respuestas a “Macro de Excel para copiar celdas de una columna en un rango variable”

  1. cesar Alejandro says:

    hola amigo, por favor si me puedes ayudar con esto, tengo una base en excel y quisiera hacer que una macro me haga lo viceversa del ejemplo que has puesto tu, como lo haria?

    osea:
    base en excel:
    lapicero1 lapicero2 lapicero3
    cesar alejandro 25-02-2012 24-05-2012 26-06-2012
    maria angola 23-03-2012 12-06-2012 30-05-2012

    resultado:
    cesar alejandro lapicero1 25-02-2012
    cesar alejandro lapicero2 24-05-2012
    cesar alejandro lapicero3 26-06-2012
    maria angola lapicero1 23-03-2012
    maria angola lapicero2 12-06-2012
    maria angola lapicero3 30-05-2012

  2. UnUsuario says:

    Que gordo que sos, pones de titulo “rango variable” y hard-codeas todo, gordo abusador…….mas que FaFa, FoFo…ganas de perder el tiempo hijo de puta…

  3. Roberto Camarillo says:

    Que tal
    Quisiera pedirte tu ayuda, quiero hacer algo similar a lo de tu ejemplo pero yo quiero tomar las filas Impares y moverlas al final de las filas pares (fila anterior) y borrar la fila que va quedando en blanco. Crees poder ayudarme? Muchas gracias

  4. marcos says:

    Hola
    Deseo copiar un rango de formulas de 60 datos en la columna A hasta la columna DD sin tener que copiar y arrastrar hasta la fila DD

Deja un Comentario