Eu tenho uma planilha enorme com uma coluna A
contendo o nome de uma pessoa e uma coluna B
contendo os cargos da pessoa em questão, assim:
--------------------------------------------
| 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 |
--------------------------------------------
Meu objetivo é mesclar os cargos em uma única linha em sua própria coluna C
, separada por vírgula. No entanto, cada pessoa pode ter de um a dez títulos e tenho milhares de pessoas na planilha.
Trabalhar com cada pessoa separadamente está fora de questão, por isso estou procurando a maneira mais eficiente (ou mais fácil) de conseguir isso:
------------------------------------------------------------------------------------------------------------------------------------------
| 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 | |
------------------------------------------------------------------------------------------------------------------------------------------
Até agora não tive sorte ao tentar duplicar fórmulas com muita eficiência.
Responder1
Não sei como fazer isso com a fórmula, mas se não houver problema em usar o VBA, tente algo assim:
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
A macro não está otimizada, mas deve funcionar. No For basta alterar o valor 1200 para o número de linhas que você deseja processar.
Responder2
Uma solução bastante desajeitada:
Use uma coluna de trabalho, por exemplo, Column D
.
Na célula D1
tenha a seguinte fórmula:
=IF(A1="",
IF(A2="",IF(D2="",B1,CONCATENATE(B1,", ",D2)),B1),
IF(A2="",IF(D2="",B1,CONCATENATE(B1,", ",D2)),B1)
)
Tenha a seguinte fórmula na célula C1
:
=IF(A1="","",D1)
Copie a fórmula nas colunas para que todas as respectivas referências funcionem.
Eu suspeito que há coisas a ver com tabelas dinâmicas que fazem as coisas de uma maneira mais clara - embora não seja algo com o qual eu tenha brincado.