Wie füge ich Zeilen in einer Spalte in Excel zu einer Zelle zusammen?


80

Z.B

A1:I
A2:am
A3:a
A4:boy 

Ich möchte sie alle zu einer einzigen Zelle zusammenführen. "Iamaboy"
Dieses Beispiel zeigt, wie 4 Zellen zu einer Zelle zusammengeführt werden. Ich habe jedoch viele Zellen (mehr als 100). Ich kann sie nicht einzeln eingeben. A1 & A2 & A3 & A4Was kann ich tun?


Sind sie alle in vertikalen 4er-Gruppen? oder möchten Sie die gesamte Spalte A in einer einzigen Zelle?
Alex K.

Können wir diese Frage bearbeiten, um auch ein Excel-VBA-Tag zu haben, wenn die Antwort in VBA akzeptiert wird? Außerdem werden ständig Fragen wie diese gestellt , und ich möchte diese als Duplikate markieren, da hier eine Antwort vorliegt.
BonCodigo

Antworten:


87

Ich präsentiere Ihnen meine ConcatenateRange VBA-Funktion (danke Jean für den Namensratschlag!). Es wird eine Reihe von Zellen (jede Dimension, jede Richtung usw.) verwendet und zu einer einzigen Zeichenfolge zusammengeführt. Als optionalen dritten Parameter können Sie einen Trennzeichen hinzufügen (z. B. ein Leerzeichen oder Kommas).

In diesem Fall würden Sie Folgendes schreiben, um es zu verwenden:

=ConcatenateRange(A1:A4)

Function ConcatenateRange(ByVal cell_range As range, _
                    Optional ByVal separator As String) As String

Dim newString As String
Dim cell As Variant

For Each cell in cell_range
    If Len(cell) <> 0 Then
        newString = newString & (separator & cell)
    End if
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(separator)))
End If

ConcatenateRange = newString

End Function

2
Dies ist nicht erforderlich, während das einfache Hinzufügen von = A1 & A2 & A3 & A4 ausreichen würde und das Hinzufügen von A1 & "" & A2 & "" & A3 & "" & A4 Ihnen einen Abstand zwischen den Werten jeder Zelle geben würde.
Michael Eakins

3
+1 aber ich würde es nennen ConcatenateRange! Die dumme Excel- CONCATENATEFunktion akzeptiert keinen Bereich als Eingabe, nur eine Liste einzelner Zellen als separate Argumente ...
Jean-François Corbett

10
Danke Jean! Ich habe Ihren Vorschlag angenommen! Michael, du hast den Punkt verpasst - das für Hunderte von Zellen zu tun ist mühsam und sinnlos.
Aevanko

1
Alles, was Sie tun müssen, ist "= CocatenateRange (A1: A10, CHAR (10))". Wenn Sie CHAR (10) übergeben, übergeben Sie das neue Zeilenzeichen. :)
Aevanko

1
Tolles Zeug. Geändert mit, Else newString = newString & (separator & Space(1))da ich die feste Breite in der resultierenden Zeichenfolge beibehalten muss.
Sir Crispalot

149

Wenn Sie dies lieber ohne VBA tun möchten, können Sie Folgendes versuchen:

  1. Haben Sie Ihre Daten in Zellen A1: A999 (oder so)
  2. Setze Zelle B1 auf "= A1"
  3. Setzen Sie die Zelle B2 auf "= B1 & A2".
  4. Kopieren Sie die Zelle B2 bis nach B999 (z. B. durch Kopieren von B2, Auswählen der Zellen B3: B99 und Einfügen).

Zelle B999 enthält jetzt die verkettete Textzeichenfolge, nach der Sie suchen.


2
Wenn Sie den Wert kopieren möchten: - Kopieren Sie die letzte Zelle (B999) (Strg + C), klicken Sie auf eine leere Zelle und klicken Sie auf der Registerkarte Start in der Gruppe Zwischenablage unter dem Symbol Einfügen auf Werte einfügen.
Kanishka

9
Das ist verschwenderisch, aber irgendwie brillant!
BH

14
Dies ist für einen einmaligen Job (was solche Fragen normalerweise sind) überhaupt nicht verschwenderisch. Dies ist der richtige Weg, da Sie sehen können, was gerade passiert, und Sie können den Verbindungsvorgang einfach weiter modifizieren (Trennzeichen hinzufügen usw.). Für einmalige Arbeiten ist VBA wie das Knacken einer Nuss mit einem Vorschlaghammer.
PeerBr

1
Dies funktioniert nicht mit großen Datenmengen. (Aus dem Gedächtnis)
Daniel

1
Das ist Genie.
Sucher

41

Im Inneren können CONCATENATESie verwenden, TRANSPOSEwenn Sie es erweitern ( F9) und dann die umgebenden {}Klammern entfernen, wie dies empfohlen wird

=CONCATENATE(TRANSPOSE(B2:B19))

Wird

=CONCATENATE("Oh ","combining ", "a " ...)

KONKATENAT (TRANSPOSE (B2: B19))

Möglicherweise müssen Sie am Ende ein eigenes Trennzeichen hinzufügen, z. B. eine Spalte C erstellen und diese Spalte transponieren.

=B1&" "
=B2&" "
=B3&" "

2
UpVote zur ausgefallenen .gif Illustration
N_E

24

In einfachen Fällen können Sie die nächste Methode verwenden, bei der Sie keine Funktion erstellen oder Code in mehrere Zellen kopieren müssen:

  1. Schreiben Sie in eine beliebige Zelle den nächsten Code

    =Transpose(A1:A9) 
    

Wobei A1: A9 Zellen sind, die Sie zusammenführen möchten.

  1. Ohne die Zelle zu verlassen, drücken Sie F9

Danach enthält die Zelle die Zeichenfolge:

={A1,A2,A3,A4,A5,A6,A7,A8,A9}

Quelle: http://www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/

Update: Ein Teil kann mehrdeutig sein. Ohne die Zelle zu verlassen, müssen Sie Ihre Zelle im Editor-Modus haben. Alternativ können Sie F9 drücken, während Sie sich im Zelleneditor befinden (normalerweise befindet es sich über der Tabelle).


Was auch immer das war, das war eine nette Idee, aber es hat bei mir nicht funktioniert. Ich gehe davon aus, dass mein Text viele Sonderzeichen enthielt und diese nicht in der richtigen Ausgabe kombinierte.
Am

1
Chris, ein merkwürdiger Teil dieser Lösung ist, dass Sie sich auf die Zelle konzentrieren müssen, bevor Sie F9 drücken. Und mit "Fokus behalten" meine ich, dass der Editor-Cursor blinkt und Sie den Text weiter eingeben können.
y.selivonchyk

1
Das Drücken von F9 funktioniert in der Mac-Version von Excel nicht.
Adam Eberlin

15

Verwenden Sie die bereits vorhandene JoinFunktion von VBA . VBA-Funktionen werden in Excel nicht verfügbar gemacht, daher füge ich Joineine benutzerdefinierte Funktion hinzu, die ihre Funktionalität verfügbar macht. Die einfachste Form ist:

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    JoinXL = Join(arr, delimiter)
End Function

Anwendungsbeispiel:

=JoinXL(TRANSPOSE(A1:A4)," ") 

als Array-Formel eingegeben (mit Ctrl- Shift- Enter).

Geben Sie hier die Bildbeschreibung ein


Akzeptiert jetzt JoinXLnur eindimensionale Arrays als Eingabe. In Excel geben Bereiche zweidimensionale Arrays zurück. Im obigen Beispiel wird TRANSPOSEdas zweidimensionale 4 × 1-Array in ein eindimensionales 4-Element-Array konvertiert (dies ist das dokumentierte Verhalten, TRANSPOSEwenn es mit einem einspaltigen zweidimensionalen Array gespeist wird).

Für einen horizontalen Bereich müssten Sie ein Double ausführen TRANSPOSE:

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))

Das Innere TRANSPOSEwandelt das zweidimensionale 1 × 4-Array in ein zweidimensionales 4 × 1-Array um, das das Äußere TRANSPOSEdann in das erwartete eindimensionale 4-Element-Array umwandelt.

Geben Sie hier die Bildbeschreibung ein

Diese Verwendung von TRANSPOSEist eine bekannte Methode zum Konvertieren von 2D-Arrays in 1D-Arrays in Excel, sieht aber schrecklich aus. Eine elegantere Lösung wäre, dies in der JoinXLVBA-Funktion zu verbergen .


1
In großen Tabellen ist diese Funktion viel schneller als die Funktion von @aevanko.
Ricidleiv Tondatto

9

Für diejenigen, die Excel 2016 haben (und ich nehme an, die nächsten Versionen), gibt es jetzt direkt die CONCAT- Funktion, die die CONCATENATE- Funktion ersetzen wird .

Der richtige Weg, dies in Excel 2016 zu tun, ist:

=CONCAT(A1:A4)

was produzieren wird:

Ich bin ein Junge

Für Benutzer älterer Excel-Versionen sind die anderen Antworten relevant.


1
Ich habe Office 2016 ProPlus für Windows installiert und es gibt CONCAT
keine

Laut Microsoft ist CONCAT in Excel 365 und 2019 verfügbar: support.microsoft.com/en-us/office/…
Ray Woodcock

4

Für Excel 2011 auf Mac ist das anders. Ich habe es in drei Schritten gemacht.

  1. Erstellen Sie eine Spalte mit Werten in Spalte A.
  2. Erstellen Sie in Spalte B rechts neben der ersten Zelle eine Regel, die die Verkettungsfunktion für den Spaltenwert und "," verwendet. Angenommen, A1 ist die erste Zeile, lautet die Formel für B1 =B1. Für die nächste Zeile zu Zeile N lautet die Formel =Concatenate(",",A2). Am Ende haben Sie:
QA
Sekuli
,Testen
, Applitools
, Visuelles Testen
, Testautomatisierung
,Selen
  1. Erstellen Sie in Spalte C eine Formel, die alle vorherigen Werte verkettet. Weil es additiv ist, erhalten Sie am Ende alles. Die Formel für Zelle C1 lautet =B1. Für alle anderen Zeilen bis N lautet die Formel =Concatenate(C1,B2). Und du bekommst:
QA, Sekuli
QA, Sekuli, Testen
QA, Sekuli, Testen, Applitools
QA, Sekuli, Testen, Applitools, Visuelles Testen
QA, Sekuli, Testen, Applitools, Visuelles Testen, Testautomatisierung
QA, Sekuli, Testen, Applitools, Visuelles Testen, Testautomatisierung, Selen

Die letzte Zelle der Liste ist das, was Sie wollen. Dies ist kompatibel mit Excel unter Windows oder Mac.


Es ist möglich, drei Werte in einer Formel zu verketten. Ich habe Werte in der Spalte A, B1 ist eine Kopie von A1 und B2 mit Formel wie =CONCATENATE(B1;",";A2). Dann müssen Sie den rechten Punkt in der Zelle für alle Zeilen nach unten ziehen und der letzte Wert wird das Ergebnis sein
oleksa

2

Ich verwende die CONCATENATEMethode, um die Werte einer Spalte zu nehmen und sie mit dazwischen liegenden Spalten in Anführungszeichen zu setzen, um die WHERE IN ()Klausel einer SQL-Anweisung schnell zu füllen.

Ich tippe immer nur =CONCATENATE("'",B2,"'",",")und wähle das aus und ziehe es nach unten, wodurch usw. erstellt =CONCATENATE("'",B3,"'",",")wird =CONCATENATE("'",B4,"'",","). Markiere dann die gesamte Spalte, kopiere das Einfügen in einen Nur-Text-Editor und füge es bei Bedarf zurück, wodurch die Zeilentrennung entfernt wird. Es funktioniert, aber genau wie ein einmaliger Deal ist dies keine gute Lösung für jemanden, der dies ständig braucht.


0

Ich weiß, dass dies wirklich eine sehr alte Frage ist, aber ich habe versucht, dasselbe zu tun, und bin auf eine neue Excel-Formel namens "TEXTJOIN" gestoßen.

Für die Frage löst die folgende Formel das Problem

=TEXTJOIN("",TRUE,(a1:a4))

Die Signatur von "TEXTJOIN" wird als TEXTJOIN erklärt (Trennzeichen, ignore_empty, text1, [text2], [text3], ...)


Laut Microsoft ist TEXTJOIN für Excel 365 und 2019 verfügbar: support.microsoft.com/en-us/office/…
Ray Woodcock
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.