Объединить переменное количество строк в Excel

Объединить переменное количество строк в Excel

У меня есть огромный рабочий лист со столбцом, Aсодержащим имя человека, и столбцом, Bсодержащим должности этого человека, например:

--------------------------------------------
| 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           |
--------------------------------------------

Моя цель — объединить названия должностей в одну строку в ее собственном столбце C, разделив их запятой. Однако у каждого человека может быть от одного до десяти названий, а у меня в рабочем листе тысячи сотрудников.

Работать с каждым человеком по отдельности не представляется возможным, поэтому я ищу наиболее эффективный (или самый простой) способ добиться этого:

------------------------------------------------------------------------------------------------------------------------------------------
| 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         |                                                                                               |
------------------------------------------------------------------------------------------------------------------------------------------

До сих пор мне не удавалось эффективно воспроизводить формулы.

решение1

Я не знаю, как это сделать с помощью формулы, но если вы не против использовать VBA, попробуйте что-то вроде этого:

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

Макрос не оптимизирован, но он должен работать. В поле For просто измените значение 1200 на номер строки, которую вы хотите обработать.

решение2

Довольно неуклюжее решение:

Используйте рабочий столбец, например, Столбец D.

В ячейке D1имеем следующую формулу:

=IF(A1="",
IF(A2="",IF(D2="",B1,CONCATENATE(B1,", ",D2)),B1),
IF(A2="",IF(D2="",B1,CONCATENATE(B1,", ",D2)),B1)
)

В ячейке должна быть следующая формула C1:

=IF(A1="","",D1)

Скопируйте формулу вниз по столбцам, чтобы все соответствующие ссылки работали.

Подозреваю, что есть что-то, связанное со сводными таблицами, что делает все более наглядно, хотя я с этим не экспериментировал.

Связанный контент