在 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,用逗号分隔。但是,每个人的职位可能在 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)

将公式复制到各列中,以便各个引用都能起作用。

我怀疑有些事情与数据透视表有关,它们可以以更清晰的方式完成工作 - 但这不是我曾经玩过的东西。

相关内容