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

4
167

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

0 0 votos
Calificación
Suscribirse
Notificar
4 Comentarios
Antiguos
Nuevos Más votados
Opinión entre párrafo
Ver todos los comentarios
Usando Internet Explorer Internet Explorer 8.0 en Windows Windows 7
Usando Mozilla Firefox Mozilla Firefox 16.0 en Windows Windows XP
Usando Internet Explorer Internet Explorer 8.0 en Windows Windows XP
Usando Google Chrome Google Chrome 23.0.1271.97 en Windows Windows Vista
cesar Alejandro

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

UnUsuario

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…

Roberto Camarillo

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

marcos

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