Ich habe ein riesiges Arbeitsblatt mit einer Spalte, A
die den Namen einer Person enthält, und einer Spalte, B
die die Berufsbezeichnungen der betreffenden Person enthält, wie folgt:
--------------------------------------------
| 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 |
--------------------------------------------
Mein Ziel ist es, die Berufsbezeichnungen in einer einzigen Zeile in einer eigenen Spalte zusammenzuführen C
, getrennt durch ein Komma. Allerdings kann jede Person zwischen einer und zehn Berufsbezeichnungen haben, und ich habe Tausende von Mitarbeitern im Arbeitsblatt.
Da es nicht in Frage kommt, mit jeder Person einzeln zu arbeiten, suche ich nach der effizientesten (oder einfachsten) Möglichkeit, dies zu erreichen:
------------------------------------------------------------------------------------------------------------------------------------------
| 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 | |
------------------------------------------------------------------------------------------------------------------------------------------
Bisher hatte ich bei meinen Versuchen, Formeln sehr effizient zu duplizieren, kein Glück.
Antwort1
Ich weiß nicht, wie das mit einer Formel geht, aber wenn es für Sie kein Problem ist, VBA zu verwenden, versuchen Sie es mit etwas wie dem Folgenden:
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
Das Makro ist nicht optimiert, aber es sollte funktionieren. Ändern Sie im „For“ einfach den Wert 1200 in die Anzahl der Zeilen, die Sie verarbeiten möchten.
Antwort2
Eine ziemlich klobige Lösung:
Verwenden Sie eine Arbeitsspalte, z. B. Spalte D
.
In der Zelle D1
steht folgende Formel:
=IF(A1="",
IF(A2="",IF(D2="",B1,CONCATENATE(B1,", ",D2)),B1),
IF(A2="",IF(D2="",B1,CONCATENATE(B1,", ",D2)),B1)
)
Die Zelle muss die folgende Formel haben C1
:
=IF(A1="","",D1)
Kopieren Sie die Formel in die Spalten, damit die jeweiligen Bezüge alle funktionieren.
Ich vermute, dass es mit Pivot-Tabellen Möglichkeiten gibt, die Dinge klarer zu regeln, aber ich habe damit noch nicht herumexperimentiert.