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?
Respuestas:
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:
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
fuente
ConcatenateRange
! LaCONCATENATE
función estúpida de Excel no acepta un rango como entrada, solo una lista de celdas individuales como argumentos separados ...Else newString = newString & (separator & Space(1))
ya que necesito retener un ancho fijo en mi cadena resultante.Si prefiere hacer esto sin VBA, puede intentar lo siguiente:
La celda B999 ahora contendrá la cadena de texto concatenada que está buscando.
fuente
En el interior
CONCATENATE
se puede utilizarTRANSPOSE
si expande ella ( F9) luego quite los alrededores{}
soportes como esto recomiendaSe convierte
=CONCATENATE("Oh ","combining ", "a " ...)
Es posible que deba agregar su propio separador al final, por ejemplo, cree una columna C y transponga esa columna.
=B1&" " =B2&" " =B3&" "
fuente
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:
En cualquier celda escriba el siguiente código
Donde A1: A9 son las celdas que le gustaría fusionar.
F9
Después de eso, la celda contendrá la cadena:
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)
fuente
Utilice la
Join
función ya existente de VBA . Las funciones de VBA no están expuestas en Excel, así que incluyoJoin
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
Uso de ejemplo:
=JoinXL(TRANSPOSE(A1:A4)," ")
ingresado como una fórmula de matriz (usando Ctrl- Shift- Enter).
Ahora,
JoinXL
acepta solo matrices unidimensionales como entrada. En Excel, los rangos devuelven matrices bidimensionales. En el ejemplo anterior,TRANSPOSE
convierte la matriz bidimensional de 4 × 1 en una matriz unidimensional de 4 elementos (este es el comportamiento documentado deTRANSPOSE
cuando se alimenta con una matriz bidimensional de una sola columna).Para un rango horizontal, tendría que hacer un doble
TRANSPOSE
:El interior
TRANSPOSE
convierte la matriz bidimensional de 1 × 4 en una matriz bidimensional de 4 × 1, queTRANSPOSE
luego la exterior convierte en la matriz unidimensional de 4 elementos esperada.Este uso de
TRANSPOSE
es 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 laJoinXL
función VBA.fuente
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:
que producirá:
Para los usuarios de versiones anteriores de Excel, las otras respuestas son relevantes.
fuente
CONCAT
funciónPara Excel 2011 en Mac es diferente. Lo hice como un proceso de tres pasos.
=B1
. Para la siguiente fila a la fila N, la fórmula es=Concatenate(",",A2)
. Terminas con:=B1
. Para todas las demás filas hasta N, la fórmula es=Concatenate(C1,B2)
. Y obtienes:La última celda de la lista será la que desee. Esto es compatible con Excel en Windows o Mac.
fuente
=CONCATENATE(B1;",";A2)
. Luego, debe arrastrar el punto hacia abajo en la celda para todas las filas y el último valor será el resultadoUtilizo el
CONCATENATE
método para tomar los valores de una columna y envolverlos entre comillas con columnas intermedias para completar rápidamente laWHERE 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.fuente
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], ...)
fuente