我有一个巨大的工作表,其中一列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
,用逗号分隔。但是,每个人的职位可能在 1 到 10 个之间,而我的工作表中有数千名人员。
与每个人单独合作是不可能的,所以我正在寻找最有效(或最简单)的方法来实现这一目标:
------------------------------------------------------------------------------------------------------------------------------------------
| 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
宏尚未优化,但应该可以工作。只需将 1200 值更改为您想要处理的行数。
答案2
一个相当笨重的解决方案:
使用工作列,例如 Column 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)
将公式复制到各列中,以便各个引用都能起作用。
我怀疑有些事情与数据透视表有关,它们可以以更清晰的方式完成工作 - 但这不是我曾经玩过的东西。