Macro de Excel que nos permite pasar de varias columnas a una sola. De momento no es una función, es un código que sorprende por su sencillez:
Sub rango_columnas() Dim rango As Variant Dim i As Long, j As Long, k As Long Dim col As Long rango = Selection.Value 'Esta es la parte que permite ubicar la salida col = Selection.Column k = Selection.Row 'Esto recorre el rango y realiza la trasposición For i = 1 To UBound(rango, 1) For j = 1 To UBound(rango, 2) Cells(k, col + UBound(rango, 2)).Value = rango(i, j) k = k + 1 Next Next End Sub
Este código lo ponéis tal cual en vuestro Excel y os ilustro a continuación sobre su funcionamiento. Lo primero es seleccionar el rango de columnas que deseamos transponer:
Ahora sólo ejecutamos la macro rango_columnas:
Y aparece justo al lado del rango que deseamos transponer a una sola columna:
En este caso el resultado lo obtenemos en la columna F. Jugando con los índices i y j de nuestra macro podremos modificar la forma de la transposición. Me parece una macro útil y por eso lo comparto con vosotros. Saludos.
Pingback: Truco Excel. Repetir un campo a partir de otro que define el número de repeticiones | Análisis y Decisión
La verdad es que el código funciona de maravilla… muchas gracias por el aporte…
¡Excelente! Me salvaste, acababa de organizar unas combinaciones con 11.675 celdas y necesitaba convertirlas a una sola columna para subir las palabras clave de una campaña de Google Adwords. Igualmente estoy asombrada no solamente por lo sencillo del código (16 líneas incluyendo comentarios) sino también por la rapidez en generar el resultado (quedé así como «¿OMG ya terminó?»). Nuevamente, ¡muchas gracias!
Te amo me solucionaste un problemon!
Funciona de Maravilla la Macro, pero tengo otro caso…. donde las columnas son de diferente tamaño de información…y al efectuar la Macro me deja espacios Vacios… Me podrias ayudar para que no contemplara esos espacios…. te lo agradecere mucho
Sub unir_columnas()
‘Por.DAM
ci = Columns(«C»).Column ‘columna inicial a unir
cf = Columns(«O»).Column ‘columna final a unir
cd = Columns(«Z»).Column ‘columna unión
f = 1 ‘fila inicial de datos
For i = ci To cf
uf = Cells(Rows.Count, i).End(xlUp).Row
ud = Cells(Rows.Count, cd).End(xlUp).Row + 1
Range(Cells(f, i), Cells(uf, i)).Copy Cells(ud, cd)
Next
End Sub
Brother!! Excelente código, muchas gracias…!!!
Muchas gracias! Me ha ahorrado muchísimo tiempo, necesitaba exactamente esta macro. Gracias!!!
Hola, no entiendo mucho de esto… quiero hacer lo mismo pero solo tengo 2 columnas y quiero que ambas esten en una sola. El codigo cómo cambia?
Lo puto amo. A tus pies.
GRACIAS !!!!!!
Genial código. pero tenemos más de 15 digitos en la celda y lo tenemos que tratar como texto. Al activar la macros nos modifica los números, se puede modificar macro para que haga el transpose a texto también?
rvaquerizo, amigo, hermano, no se si leas esto, pero me has salvado de una bien complicada, estoy que lloro. Muchas gracias en serio!!!!
Perdon, donde copio ese primer codigo?
Hola, Buen día. Estaba tratando de dejar todo en una solo columna pero no podía. Y buscando encontré este excelente código. Muchas gracias. Excelente aporte un abrazo.
Hola,
bueno, muchas gracias por este código, la verdad quiero empezar diciendo que no sé absolutamente nada de Programación, pero necesitaba que no me transpusiera celda a celda recorriendo a lo largo de una misma fila sino que recorriera el rango a lo largo de una misma columna, le di diez millones de vueltas, hasta que lo logré, la verdad me apena porque era una tontería, solo decirle que empezara por j (columna), y luego recorriera i (fila) o al menos, así lo entendí cambiar ese orden en el código y ya, s los dejo por si le ayuda a alguien. GRACIAS A RVAQUERIZO POR ESTO TAN ÚTIL:
Sub Columnas ()
Dim rango As Variant
Dim i As Long, j As Long, k As Long
Dim col As Long
rango = Selection.Value
‘Esta es la parte que permite ubicar la salida
col = Selection.Column
k = Selection.Row
‘Esto recorre el rango y realiza la trasposición
For i = 1 To UBound(rango, 1)
For j = 1 To UBound(rango, 2)
Cells(k, col + UBound(rango, 2)).Value = rango(i, j)
k = k + 1
Next
Next
End Sub
Chao!!
Hola, perdón!!, acá está el cambio:
Sub Columnas()
Dim rango As Variant
Dim i As Long, j As Long, k As Long
Dim col As Long
rango = Selection.Value
‘Esta es la parte que permite ubicar la salida
col = Selection.Column
k = Selection.Row
‘Esto recorre el rango y realiza la trasposición
For j = 1 To UBound(rango, 2)
For i = 1 To UBound(rango, 1)
Cells(k, col + UBound(rango, 2)).Value = rango(i, j)
k = k + 1
Next
Next
End Sub
claro, es sencillo de cambiar, por eso no dupliqué la entrada
amigo
este es mi correo
jhuacones@gmail.com
he utilizado su macro pero el resultado lo hubica a lado de todas las columnas
habria alguna forma de selecionar que cuando lo ordene todas las columnas en una sola lo haga en la siguiente hoja
vi algo similar en kutools pero no permite grabar macro.
gracias
Menos mal que lo comentaste! mil gracias a ambooos!!
Acabo de usarlo para un montón de palabras que necesitaba agrupar en una sola columna…No sé nada de macros y la verdad intenté hacer los pasos y simplemente me sorprendí porque solo pegué el código y di play en ejecutar y cuando vi estaba mi columna como la quería! MIL GRACIAS!
Hola, muchas gracias por el código, es muy útil.
¿Alguien sabe cómo hacer para que evite copiar las celdas en blanco?
ALGUIEN QUE ME AYUDE? NECESITO PASAR VARIAS COLUMNAS A UNA SOLA DE MANERA CONSECUTIVA? NO SE NADA DE PROGRAMACIÓN Y NO ENTIENDO! DE ANTEMANO GRACIAS!!!
¡Muchas gracias! Me ha servido de maravilla :D
Gran aporte. Me ayudaste en gran manera. Muchas gracias.
ERES UN GENIO AMIGO.
GRACIAS
SÚPER MIL GRACIAS!!!
No me había fijado nunca en los comentarios de esta entrada.
¡Me han hecho gracia!
Maquinón. Va perfecto
amigos tengo un caso
tengo un grupo de columnas en la 1era hoja las cual al aplicar la macro funciona muy bien pero me las ordena justo a lado de donde estan todas las columnas podrian ayudarme modificandola para que cuando una todas columnas en una sola lo haga en la siguiente hoja.
Gracias de antemano
me gustaria enviarles el archivo para que lo revisen
la macro que uso es rango_columnas
Muchas Gracias, el código es de grandísima utilidad.
Pero aún no encuentro como unir columnas en una sola sin copiar las celdas vacías, algo así:
A B C D E
34 34
12 12
67 67
89 89
43 43
50 50
56 56
Apenas empiezo con macros, agradezco de antemano la ayuda que me brinden. Saludos
Muchas gracias, me sirvió de maravilla!!!!
Muchas gracias me sirvió bastante
Estimados mil gracias por los aportes, solo quería preguntar si sabrían decirme como hacer la misma macro, pero que en vez de darme el valor de cada celda, realice un vinculo para que trabaje de forma dinámica
Saludos
Hola, no entiendo muy bien. Creo que esto es lo que está buscando https://analisisydecision.es/desref-para-trasponer-en-excel-varias-columnas/
Está brutal, justo necesitaba esto :)
Gracias por la macro. Pero tengo una duda, tengo una tabla donde sólo querría unir dos columnas no contiguas, en el ejemplo que planteas unir las columnas B y E saltándonos las C y D.
En ese caso o bien «cocinas los datos» para poder hacerlo, eliminando las columnas que no se trasponen, o bien en vez de ser un rango de selección cambias los índices de la macro. PEro te sugiero eliminar columnas.
Genial!
Funciona de maravilla.