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)
それぞれの参照がすべて機能するように、数式を列の下にコピーします。
ピボット テーブルを使えば、もっと明確な方法で物事を行えるのではないかと思いますが、私が試したことはありません。