¿Cómo fusionar filas en una columna en una celda en Excel?

81

P.ej

A1:I
A2:am
A3:a
A4:boy 

Quiero fusionarlos todos en una sola celda "Iamaboy"
Este ejemplo muestra que 4 celdas se fusionan en 1 celda, sin embargo, tengo muchas celdas (más de 100), no puedo escribirlas una por una usando A1 & A2 & A3 & A4¿qué puedo hacer?

red23jordan
fuente
¿Están todos en grupos verticales de 4? ¿O quieres toda la columna A en una sola celda?
Alex K.
¿Podemos editar esta pregunta para que también tenga una etiqueta Excel-VBA, dada la respuesta aceptada en VBA? Además, hay preguntas como esta que se hacen todo el tiempo y me gustaría marcarlas como duplicadas ya que aquí hay una respuesta.
bonCodigo

Respuestas:

87

Les presento mi función ConcatenateRange VBA (¡gracias Jean por el consejo de nomenclatura!). Tomará un rango de celdas (cualquier dimensión, cualquier dirección, etc.) y las fusionará en una sola cadena. Como tercer parámetro opcional, puede agregar un separador (como un espacio o comas separadas).

En este caso, escribirías esto para usarlo:

=ConcatenateRange(A1:A4)

Function ConcatenateRange(ByVal cell_range As range, _
                    Optional ByVal separator As String) As String

Dim newString As String
Dim cell As Variant

For Each cell in cell_range
    If Len(cell) <> 0 Then
        newString = newString & (separator & cell)
    End if
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(separator)))
End If

ConcatenateRange = newString

End Function
Aevanko
fuente
2
Esto es sencillo, mientras que funcional simplemente agregar un = A1 & A2 & A3 & A4 sería suficiente y agregar A1 & "" & A2 & "" & A3 & "" & A4 le dará un espacio entre los valores de cada celda.
Michael Eakins
3
+1 pero yo lo llamaría ConcatenateRange! La CONCATENATEfunción estúpida de Excel no acepta un rango como entrada, solo una lista de celdas individuales como argumentos separados ...
Jean-François Corbett
10
¡Gracias Jean! ¡He adoptado tu sugerencia! Michael, no entendiste el punto: hacer eso con cientos de células es tedioso y sin sentido.
Aevanko
1
TODO lo que tiene que hacer es "= CocatenateRange (A1: A10, CHAR (10))" al pasar CHAR (10) está pasando el carácter de nueva línea. :)
aevanko
1
Buena cosa. Modificado con Else newString = newString & (separator & Space(1))ya que necesito retener un ancho fijo en mi cadena resultante.
Sir Crispalot
149

Si prefiere hacer esto sin VBA, puede intentar lo siguiente:

  1. Tenga sus datos en las celdas A1: A999 (o tal)
  2. Establezca la celda B1 en "= A1"
  3. Establezca la celda B2 en "= B1 y A2"
  4. Copie la celda B2 hasta B999 (por ejemplo, copiando B2, seleccionando las celdas B3: B99 y pegando)

La celda B999 ahora contendrá la cadena de texto concatenada que está buscando.

Mischinab
fuente
2
Si desea copiar el valor: - Copie (ctrl + c) la última celda (B999), haga clic en una celda vacía y en la pestaña Inicio, en el grupo Portapapeles, debajo del icono Pegar, haga clic en Pegar valores.
Kanishka
9
¡Esto es un desperdicio, pero algo brillante!
BH
14
Esto no es un desperdicio en absoluto para un trabajo de una sola vez (como suelen ser estas preguntas). Es el camino a seguir porque le permite ver lo que está sucediendo, además de que puede modificar aún más la operación de unión fácilmente (agregar separadores, etc.). Para trabajos únicos, VBA es como romper una nuez con un mazo.
PeerBr
1
Esto no funciona con grandes conjuntos de datos. (Fuera de memoria)
Daniel
1
Esto es genial.
buscador
42

En el interior CONCATENATEse puede utilizar TRANSPOSEsi expande ella ( F9) luego quite los alrededores {}soportes como esto recomienda

=CONCATENATE(TRANSPOSE(B2:B19))

Se convierte

=CONCATENATE("Oh ","combining ", "a " ...)

CONCATENAR (TRANSPONER (B2: B19))

Es posible que deba agregar su propio separador al final, por ejemplo, cree una columna C y transponga esa columna.

=B1&" "
=B2&" "
=B3&" "
KCD
fuente
2
Vota a la elegante ilustración .gif
N_E
24

En casos simples, puede usar el siguiente método que no requiere que cree una función o que copie el código en varias celdas:

  1. En cualquier celda escriba el siguiente código

    =Transpose(A1:A9) 
    

Donde A1: A9 son las celdas que le gustaría fusionar.

  1. Sin salir de la celda presione F9

Después de eso, la celda contendrá la cadena:

={A1,A2,A3,A4,A5,A6,A7,A8,A9}

Fuente: http://www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/

Actualización: una parte puede ser ambigua. Sin salir de la celda significa tener su celda en modo editor. Alternativamente, puede presionar F9 mientras está en el panel del editor de celdas (normalmente se puede encontrar encima de la hoja de cálculo)

y.selivonchyk
fuente
Sea lo que sea, fue una buena idea, sin embargo, no funcionó para mí. Supongo que debido a que mi texto tenía muchos caracteres especiales en ellos, no los combinó en la salida correcta. Terminé escribiendo manualmente a1 & b1 & c1 & ......
Chris Marisic
1
Chris, una parte extraña de esta solución es que debes mantenerte enfocado en la celda antes de presionar F9. Y por "mantener el enfoque" me refiero a que el cursor del editor parpadee y pueda continuar escribiendo el texto.
y.selivonchyk
1
Pulsar F9 no funciona en la versión Mac de Excel.
Adam Eberlin
15

Utilice la Joinfunción ya existente de VBA . Las funciones de VBA no están expuestas en Excel, así que incluyo Joinuna función definida por el usuario que expone su funcionalidad. La forma más simple es:

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    JoinXL = Join(arr, delimiter)
End Function

Uso de ejemplo:

=JoinXL(TRANSPOSE(A1:A4)," ") 

ingresado como una fórmula de matriz (usando Ctrl- Shift- Enter).

ingrese la descripción de la imagen aquí


Ahora, JoinXLacepta solo matrices unidimensionales como entrada. En Excel, los rangos devuelven matrices bidimensionales. En el ejemplo anterior, TRANSPOSEconvierte la matriz bidimensional de 4 × 1 en una matriz unidimensional de 4 elementos (este es el comportamiento documentado de TRANSPOSEcuando se alimenta con una matriz bidimensional de una sola columna).

Para un rango horizontal, tendría que hacer un doble TRANSPOSE:

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))

El interior TRANSPOSEconvierte la matriz bidimensional de 1 × 4 en una matriz bidimensional de 4 × 1, que TRANSPOSEluego la exterior convierte en la matriz unidimensional de 4 elementos esperada.

ingrese la descripción de la imagen aquí

Este uso de TRANSPOSEes una forma bien conocida de convertir matrices 2D en matrices 1D en Excel, pero se ve terrible. Una solución más elegante sería ocultar esto en la JoinXLfunción VBA.

Jean-François Corbett
fuente
1
En tablas grandes, esta función es mucho más rápida que la función de @aevanko.
Ricidleiv Tondatto
9

Para quienes tienen Excel 2016 (y supongo que en las próximas versiones), ahora está directamente la función CONCAT , que reemplazará a la función CONCATENAR .

Entonces, la forma correcta de hacerlo en Excel 2016 es:

=CONCAT(A1:A4)

que producirá:

Soy un chico

Para los usuarios de versiones anteriores de Excel, las otras respuestas son relevantes.

gvo
fuente
1
Tengo Office 2016 ProPlus para Windows instalado y NO hay CONCATfunción
oleksa
Microsoft dice que CONCAT está disponible en Excel 365 y 2019: support.microsoft.com/en-us/office/…
Ray Woodcock
4

Para Excel 2011 en Mac es diferente. Lo hice como un proceso de tres pasos.

  1. Cree una columna de valores en la columna A.
  2. En la columna B, a la derecha de la primera celda, cree una regla que utilice la función concatenar en el valor de la columna y ",". Por ejemplo, suponiendo que A1 es la primera fila, la fórmula para B1 es =B1. Para la siguiente fila a la fila N, la fórmula es =Concatenate(",",A2). Terminas con:
QA
, Sekuli
,Pruebas
, Applitools
, Pruebas visuales
, Automatización de pruebas
,Selenio
  1. En la columna C, cree una fórmula que concatene todos los valores anteriores. Debido a que es aditivo, obtendrás todo al final. La fórmula de la celda C1 es =B1. Para todas las demás filas hasta N, la fórmula es =Concatenate(C1,B2). Y obtienes:
QA, Sekuli
Control de calidad, Sekuli, Pruebas
QA, Sekuli, Testing, Applitools
Control de calidad, Sekuli, Testing, Applitools, Pruebas visuales
QA, Sekuli, Testing, Applitools, Pruebas visuales, Automatización de pruebas
Control de calidad, Sekuli, Testing, Applitools, Pruebas visuales, Automatización de pruebas, Selenio

La última celda de la lista será la que desee. Esto es compatible con Excel en Windows o Mac.

Chris Riley
fuente
es posible concatenar tres valores en una fórmula. Tengo valores en la columna A, B1 es una copia de A1 y B2 con una fórmula similar =CONCATENATE(B1;",";A2). Luego, debe arrastrar el punto hacia abajo en la celda para todas las filas y el último valor será el resultado
oleksa
2

Utilizo el CONCATENATEmétodo para tomar los valores de una columna y envolverlos entre comillas con columnas intermedias para completar rápidamente la WHERE IN ()cláusula de una declaración SQL.

Siempre escribo =CONCATENATE("'",B2,"'",",")y luego selecciono eso y lo arrastro hacia abajo, lo que crea =CONCATENATE("'",B3,"'",","), =CONCATENATE("'",B4,"'",",")etc., luego resalto toda la columna, copie y pegue en un editor de texto sin formato y vuelva a pegar si es necesario, eliminando así la separación de filas. Funciona, pero de nuevo, como un trato único, esta no es una buena solución para alguien que necesita esto todo el tiempo.

GoldPaintedLemons
fuente
0

Sé que esta es realmente una pregunta muy antigua, pero estaba tratando de hacer lo mismo y me encontré con una nueva fórmula en Excel llamada "TEXTJOIN".

Para la pregunta, la siguiente fórmula resuelve el problema

=TEXTJOIN("",TRUE,(a1:a4))

La firma de "TEXTJOIN" se explica como TEXTJOIN (delimitador, ignore_empty, text1, [text2], [text3], ...)

Nick Allen
fuente
Microsoft dice que TEXTJOIN está disponible para Excel 365 y 2019: support.microsoft.com/en-us/office/…
Ray Woodcock