So fügen Sie den Inhalt mehrerer Zeilen in eine Zelle ein, indem Sie in Excel 2010 nach einer dritten Zeile gruppieren

2331
Graeck

Ich versuche, mehrere Namen aus verschiedenen Zeilen in eine Zelle in einer Zeile zu bringen, aber gruppiere sie nach einem Wert in einer anderen Spalte. Ich brauche auch die Liste der Namen, um Zeilenumbrüche zwischen ihnen zu haben, keine durch Kommas getrennte Liste. Ich bin mir nicht sicher, ob das überhaupt möglich sein wird. Ich habe einige Teile, die ich brauche, wie = CONCATENATE (TRANSPOSE (B2: B19)), um die Daten in eine Zelle zu bringen, und char (10), um den Zeilenumbruch hinzuzufügen, aber ich konnte es nicht um es zusammenzubringen, um zu bekommen, was ich will.

Daten sind derzeit so:

enter image description here

Was ich möchte:

enter image description here

Sogar eine VBA-Lösung ist in Ordnung - obwohl es nicht meine Stärke ist. ;) Ich brauche solche Daten, um sie in einem Word-Seriendruck verwenden zu können.

Beachten Sie auch, dass die Tabelle einige weitere Datenspalten enthält. Ich habe der Einfachheit halber ausgelassen.

0

3 Antworten auf die Frage

1
pat2015

Ich empfehle eine Lösung, die etwas VBA erfordert.

In diesem Beispiel befinden sich Beispieldaten in B2: C10. Lassen Sie E1 als Überschriftszelle und geben Sie in E2 die folgende Formel ein. Drücken Sie innerhalb der Formelleiste STRG + UMSCHALT + EINGABETASTE, um eine Array-Formel zu erstellen. Die Formel wird nun in geschweifte Klammern eingeschlossen, um anzuzeigen, dass es sich um eine Array-Formel handelt.

=IFERROR(INDEX($B$2:$B$10, MATCH(0, COUNTIF(E$1:$E1, $B$2:$B$10), 0),1),"") 

Ziehen Sie dies nach unten, bis Sie Leerstellen erhalten. Dadurch wird zunächst eine Liste eindeutiger Werte aus der Gruppe B2: B10 erstellt. Wenn Sie diese Formel verwenden, sollte mindestens eine Zelle darüber verfügbar sein, auf die verwiesen werden kann. E1 in diesem Fall als Formel beginnt in E2.

Wir werden eine Funktion namens TEXTJOIN verwenden. In den meisten Versionen von Excel ist dies jedoch nicht verfügbar. Wenn Sie die Office 365-Version von Excel 2016 verwenden, ist dies möglicherweise der Fall. Wenn nicht verfügbar, verwenden Sie unter UDF (User Defined Function) in VBA die gleiche Funktionalität.

Drücken Sie ALT + F11, um den VBA-Editor aufzurufen. Fügen Sie im Menü Einfügen ein Modul ein. Fügen Sie die folgende UDF hinzu.

Function TEXTJOIN1(delimiter As String, ignore_empty As Boolean, ParamArray cell_ar() As Variant) For Each cellrng In cell_ar For Each cell In cellrng If ignore_empty = False Then result = result & cell & delimiter Else If cell <> "" Then result = result & cell & delimiter End If End If Next cell Next cellrng TEXTJOIN1 = Left(result, Len(result) - Len(delimiter)) End Function 

Nun zurück zum Excel-Sheet, wir werden diese Funktion als UDF in Formel verwenden. Fügen Sie in F2 die folgende Formel ein, und drücken Sie STRG + UMSCHALT + EINGABETASTE, um eine Array-Formel zu erstellen.

=IFERROR(TEXTJOIN1(CHAR(10),TRUE,IF($B$2:$B$10=E2,$C$2:$C$10,"")),"") 

Ziehen Sie es bis zu den vorgesehenen Reihen nach unten. Warten Sie, dies erstellt eine Liste von Namen nach Gruppen, die mit Char (10) verkettet sind. Um jedoch den richtigen Effekt zu sehen, müssen Sie den Wrap-Text in den beabsichtigten Zellen aktivieren. Sie können dies manuell mit der Option "Zellen formatieren" in Excel durchführen oder Sie können dies unter dem einfachen Makro verwenden, um es für Sie auszuführen. Geben Sie einfach den Bereich am Anfang an. In diesem Beispiel ist es E2: F4.

Drücken Sie ALT + F11, um den VBA-Editor aufzurufen. Fügen Sie ein Modul aus dem Menü Einfügen ein und fügen Sie den folgenden Code ein. Dadurch wird ein Makro mit dem Namen Format1 erstellt

Unterformat1 ()

 Range("E2:F4").Select With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlTop .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With End Sub 

Zurück in der Excel-Tabelle Drücken Sie ALT + F8, um das Makro-Dialogfeld aufzurufen, und führen Sie das Format1 aus.

Testen Sie diese Lösung an Ihrem Ende und informieren Sie mich bei Problemen.

enter image description here

Vielen Dank! Das sieht so aus, als würde es auch funktionieren. Wir konnten eine andere Lösung finden, bevor ich zurückging und nach Antworten suchte. Graeck vor 6 Jahren 0
1
Graeck

Nach dem Posting und bevor ich die andere Antwort sah, arbeitete ich mit einem Kollegen und wir haben es zum Laufen gebracht.

Begonnen durch Sortieren nach Gruppe, dann nach Name.

Dann fügten wir eine Spalte hinzu, in der geprüft wurde, ob der Name bereits hinzugefügt wurde (es gibt Duplikate) und ob die Gruppe gleich oder unterschiedlich war. Wenn dieser Name noch nicht hinzugefügt wurde und es sich immer noch um dieselbe Gruppe handelte, wurde der neue Name aus der obigen Zelle in die Liste aufgenommen.

=IF(B2=B1,C1,IF(A2=A1,CONCATENATE(C1,CHAR(10),B2),B2)) 

In einer anderen Spalte haben wir eine laufende Rückwärtszählung der Namen in der Gruppe erstellt.

=IF(A2=A1,D1-1,COUNTIF(A:A,A2)) 

Welches bekam das:

Dann haben wir nur Spalte D nach "1" gefiltert:

0
Rajesh S

Private Sub MergeDuplicates()   Dim Rng As Range, xCell As Range Dim xRows As Integer   xTitleId = "Merge Duplicates"  Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)  Application.ScreenUpdating = False Application.DisplayAlerts = False  xRows = WorkRng.Rows.count  For Each Rng In WorkRng.Columns For i = 1 To xRows - 1 For j = i + 1 To xRows If Rng.Cells(i, 1).Value <> Rng.Cells(j, 1).Value Then Exit For End If Next WorkRng.Parent.Range(Rng.Cells(i, 1), Rng.Cells(j - 1, 1)).Merge i = j - 1  Next Next  Application.DisplayAlerts = True Application.ScreenUpdating = True  End Sub 

NB Fügen Sie diesen Code als Modul und zurück zum Arbeitsblatt ein, wählen Sie den erforderlichen Datenbereich aus, wenn INPUT BOX angezeigt wird, und schließen Sie mit Ok ab.