У меня есть огромный рабочий лист со столбцом, 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)
Скопируйте формулу вниз по столбцам, чтобы все соответствующие ссылки работали.
Подозреваю, что есть что-то, связанное со сводными таблицами, что делает все более наглядно, хотя я с этим не экспериментировал.