Concatenación de valores de un número variable de celdas (Microsoft Excel)
Pam tiene dos columnas de datos. En la columna A hay identificadores simples, como A, B, C, etc. En la columna B hay una serie de valores enteros.
Puede ordenar los datos por el identificador y, en segundo lugar, por los valores enteros. Ahora quiere, en la columna C, tener una fórmula que concatenará todos los valores enteros para un identificador particular. Por lo tanto, si A1: A4 contienen todos el identificador A, entonces en la celda C1 le gustaría tener todos los valores en B1: B4 concatenados y divididos por comas, como «11, 17, 19, 25». Dado que el número de filas para cada identificador puede ser diferente, Pam no está segura de cómo realizar la concatenación.
La forma más sencilla de lograr esto es utilizar una macro, que se puede crear como una función definida por el usuario. Aquí tienes un ejemplo:
Function CatSame(c As Range) As String Application.Volatile sTemp = "" iCurCol = c.Column If iCurCol = 3 Then If c.Row = 1 Then sLast = "" Else sLast = c.Offset(-1, -2) End If If c.Offset(0, -2) <> sLast Then J = 0 Do sTemp = sTemp & ", " & c.Offset(J, -1) J = J + 1 Loop While c.Offset(J, -2) = c.Offset(J - 1, -2) sTemp = Right(sTemp, Len(sTemp) - 2) End If End If CatSame = sTemp End Function
Esta función básicamente toma un valor que se le pasa (una referencia de celda) y verifica que la referencia de celda es para la columna C. Si lo es, entonces comienza a concatenar valores de la columna B en función de los valores de la columna A. Solo devuelve la cadena de valores concatenados si el valor de la columna A es diferente al valor de la fila superior.
Suponiendo que sus identificadores están en la columna A y sus valores a concatenar están en la columna B, podría colocar lo siguiente en la columna C:
=CatSame(C1)
Copie esto tanto como sea necesario en la columna C y terminará con exactamente lo que Pam quería.
Una función más versátil sería aquella que funcionaría como BUSCARV, pero devolvería una lista concatenada de valores que coinciden con lo que esté buscando. Considere la siguiente función:
Function VLookupAll(vValue, rngAll As Range, _ iCol As Integer, Optional sSep As String = ", ") Dim rCell As Range Dim rng As Range On Error GoTo ErrHandler Application.Volatile Set rng = Intersect(rngAll, rngAll.Columns(1)) For Each rCell In rng If rCell.Value = vValue Then _ VLookupAll = VLookupAll & sSep & _ rCell.Offset(0, iCol).Value Next rCell If VLookupAll = "" Then VLookupAll = CVErr(xlErrNA) Else VLookupAll = Right(VLookupAll, Len(VLookupAll) - Len(sSep)) End If ErrHandler: If Err.Number <> 0 Then VLookupAll = CVErr(xlErrValue) End Function
Esta función toma hasta cuatro argumentos. El primero es el valor que desea hacer coincidir en su búsqueda. En el caso de Pam, este sería el identificador que desea, como A, B o C. El segundo argumento es el rango de celdas en las que buscar las coincidencias (columna A en este caso).
El tercer argumento es un desplazamiento (del rango en el segundo argumento)
que representa los valores que desea concatenar. Puede usar la función de esta manera:
=VLookupAll("B",A1:A99,1)
Si desea especificar un delimitador diferente entre valores, puede hacerlo usando el cuarto argumento opcional. Por ejemplo, lo siguiente devuelve una cadena donde un guión separa cada valor:
=VLookupAll("B",A1:A99,1,"-")
Las soluciones hasta ahora se han centrado en el uso de macros. La razón de esto es relativamente simple: no existe una solución basada en fórmulas que pueda hacer lo que Pam necesita. El uso de declaraciones IF anidadas para evaluar lo que hay en la columna A no funcionará bien porque está limitado en la profundidad con que se pueden anidar las declaraciones IF.
Puede usar una fórmula y un resultado intermedio si no le importa que los valores concatenados estén en la última instancia de un identificador en la columna A. Comience colocando esta fórmula en la celda C1:
=B1
Esta fórmula debe ir a la celda C2:
=IF(A2=A1,C1 & ", " & B2, B2)
Copie esta fórmula tantas filas como sea necesario. Lo que termina con es una serie cada vez más larga de valores concatenados en la columna C, y el más largo de cada ejecución se encuentra en la misma fila que el último identificador secuencial en la columna A. Luego, puede poner lo siguiente en todas las celdas de columna correspondientes D:
=IF(LEN(C2)>LEN(C1),"",C1)
Esta fórmula solo muestra las cadenas más largas de la columna C, que es lo que Pam necesitaba para empezar.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (9199) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:
link: / excel-Concatenating_Values_from_a_Variable_Number_of_Cells [Concatenando valores de un número variable de celdas]
.