varias unir una tabla sola perder para nombres filas datos convertir concatenar como combinar columnas celdas apellidos excel excel-vba

unir - ¿Cómo combinar filas en una columna en una celda en Excel?



unir nombres y apellidos en excel (8)

P.ej

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

Quiero fusionarlos a todos en una sola célula "Iamaboy"
Este ejemplo muestra que 4 celdas se combinan 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?


Dentro de CONCATENATE , puede usar TRANSPOSE si lo expande ( F9 ) y luego quita los {} paréntesis que lo rodean, como se recomienda.

=CONCATENATE(TRANSPOSE(B2:B19))

Se convierte

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

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

=B1&" " =B2&" " =B3&" "


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, escribe el siguiente código

    =Transpose(A1:A9)

Donde A1: A9 son 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 la celda (normalmente se puede encontrar arriba de la hoja de cálculo)


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

  1. Crea una columna de valores en la columna A.
  2. En la columna B, a la derecha de la primera celda, crea una regla que use la función de concatenación en el valor de columna y ",". Por ejemplo, suponiendo que A1 es la primera fila, la fórmula para B1 es =B1 . Para la siguiente fila en la fila N, la fórmula es =Concatenate(",",A2) . Terminas con:

QA ,Sekuli ,Testing ,Applitools ,Visual Testing ,Test Automation ,Selenium

  1. En la columna C, crea una fórmula que concatena todos los valores anteriores. Como es aditivo, obtendrá todo al final. La fórmula para la celda C1 es =B1 . Para todas las demás filas a N, la fórmula es =Concatenate(C1,B2) . Y obtienes:

QA,Sekuli QA,Sekuli,Testing QA,Sekuli,Testing,Applitools QA,Sekuli,Testing,Applitools,Visual Testing QA,Sekuli,Testing,Applitools,Visual Testing,Test Automation QA,Sekuli,Testing,Applitools,Visual Testing,Test Automation,Selenium

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


Para aquellos que tienen Excel 2016 (y supongo que las próximas versiones), ahora hay directamente la función CONCAT , que reemplazará la función CONCATENATE .

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.


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

  1. Tenga sus datos en las celdas A1: A999 (o similares)
  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 celdas B3: B99 y pegando)

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


Te presento mi función ConcatenateRange VBA (¡gracias Jean por el consejo de nombrar!). 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, deberías escribir 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


Use la función de unión ya existente de VBA. Las funciones de VBA no están expuestas en Excel, por lo tanto, envuelvo Join en una 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

Ejemplo de uso:

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

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

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

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

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

El TRANSPOSE interno convierte la matriz bidimensional de 1 × 4 en una matriz bidimensional de 4 × 1, que el TRANSPOSE externo convierte luego en la matriz unidimensional esperada de 4 elementos.

Este uso de TRANSPOSE es una forma muy 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 función JoinXL VBA.


Utilizo el método CONCATENATE para tomar los valores de una columna y ajustar las comillas a su alrededor con columnas intermedias para rellenar rápidamente la cláusula WHERE IN () de una instrucción SQL.

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