Mesclar quantidade variável de linhas no Excel

Mesclar quantidade variável de linhas no Excel

Eu tenho uma planilha enorme com uma coluna Acontendo o nome de uma pessoa e uma coluna Bcontendo 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 D1tenha 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.

informação relacionada