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 行にまとめ、独自の列にすることです。ただし、各人の役職名は 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

マクロは最適化されていませんが、動作するはずです。For で、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)

それぞれの参照がすべて機能するように、数式を列の下にコピーします。

ピボット テーブルを使えば、もっと明確な方法で物事を行えるのではないかと思いますが、私が試したことはありません。

関連情報