Tengo una hoja de trabajo enorme con una columna A
que contiene el nombre de una persona y una columna B
que contiene los puestos de trabajo de la persona en cuestión, como esta:
--------------------------------------------
| Column A | Column B |
|-------------------------------------------
| John Doe | CEO |
| | CIO |
| | CTO |
| Frank Black | General Manager |
| | HR Manager |
| Tabitha White | Payroll specialist |
| Jane Doe | General Supervisor |
| | Superintendent |
| | Building maintenance |
| | System administrator |
| | IT specialist |
--------------------------------------------
Mi objetivo es fusionar los títulos de los trabajos en una sola fila en su propia columna C
, separados por una coma. Sin embargo, cada persona puede tener entre uno y diez títulos y tengo miles de personas en la hoja de trabajo.
Trabajar con cada persona por separado está fuera de discusión, por lo que estoy buscando la forma más eficiente (o más fácil) de lograrlo:
------------------------------------------------------------------------------------------------------------------------------------------
| Column A | Column B | Column C |
|----------------------------------------------------------------------------------------------------------------------------------------|
| John Doe | CEO | CEO, CIO, CTO |
| | CIO | |
| | CTO | |
| Frank Black | General Manager | General Manager, HR Manager |
| | HR Manager | |
| Tabitha White | Payroll specialist | Payroll specialist |
| Jane Doe | General Supervisor | General Supervisor, Superintendent, Building Maintenance, System administrator, IT specialist |
| | Superintendent | |
| | Building maintenance | |
| | System administrator | |
| | IT specialist | |
------------------------------------------------------------------------------------------------------------------------------------------
Hasta ahora no he tenido suerte al intentar duplicar fórmulas de manera muy eficiente.
Respuesta1
No sé cómo hacer eso con la fórmula, pero si está bien usar VBA, intente algo como esto:
Sub newMacro()
Dim i As Integer
Dim posName As Integer
Dim val As String
val = Cells(1, 2).Value
posName = 1
For i = 2 To 1200
If IsEmpty(Cells(i, 1)) Then
val = val + "," + Cells(i, 2).Value
Else
Cells(posName, 3).Value = val
val = Cells(i, 2).Value
posName = i
End If
Next
End Sub
La macro no está optimizada, pero debería funcionar. En For, simplemente cambie el valor 1200 al número de línea que desea procesar.
Respuesta2
Una solución bastante torpe:
Utilice una columna de trabajo, por ejemplo, Columna D
.
En la celda D1
tenemos la siguiente fórmula:
=IF(A1="",
IF(A2="",IF(D2="",B1,CONCATENATE(B1,", ",D2)),B1),
IF(A2="",IF(D2="",B1,CONCATENATE(B1,", ",D2)),B1)
)
Tenga la siguiente fórmula en la celda C1
:
=IF(A1="","",D1)
Copie la fórmula en las columnas para que todas las referencias respectivas funcionen.
Sospecho que hay cosas que hacer con las tablas dinámicas que hacen las cosas de una manera más clara, aunque no es algo con lo que haya jugado.