Jak scalić wiersze w kolumnie w jedną komórkę w programie Excel?

81

Na przykład

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

Chcę połączyć je wszystkie w jedną komórkę „Iamaboy”
Ten przykład pokazuje, że 4 komórki łączą się w 1 komórkę, ale mam wiele komórek (ponad 100). Nie mogę ich wpisywać pojedynczo, korzystając z A1 & A2 & A3 & A4tego, co mogę zrobić?

red23jordan
źródło
Czy wszyscy są w pionowych grupach po 4? czy chcesz, aby cała kolumna A znajdowała się w jednej komórce?
Alex K.
Czy możemy edytować to pytanie, aby mieć również tag Excel-VBA, biorąc pod uwagę zaakceptowaną odpowiedź w VBA? Poza tym takie pytania są zadawane przez cały czas i chciałbym oznaczyć je jako duplikaty, ponieważ jest tutaj odpowiedź.
bonCodigo

Odpowiedzi:

87

Przedstawiam wam moją funkcję ConcatenateRange VBA (dzięki Jean za radę dotyczącą nazewnictwa!). Zajmie zakres komórek (dowolny wymiar, dowolny kierunek itp.) I połączy je w jeden ciąg. Jako opcjonalny trzeci parametr możesz dodać separator (taki jak spacja lub przecinki z separatorem).

W takim przypadku napisałbyś to, aby go użyć:

=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
aevanko
źródło
2
Jest to niepotrzebne, chociaż wystarczyłoby po prostu dodanie znaków = A1 i A2 i A3 i A4, a dodanie A1 & „” i A2 & „” i A3 i „” i A4 dałoby spację między wartościami każdej komórki.
Michael Eakins
3
+1, ale nazwałbym to ConcatenateRange! Głupia CONCATENATEfunkcja Excela nie zaakceptuje zakresu jako danych wejściowych, tylko listę pojedynczych komórek jako oddzielne argumenty ...
Jean-François Corbett
10
Dzięki Jean! Przyjąłem twoją sugestię! Michael, przegapiłeś sedno - robienie tego dla setek komórek jest żmudne i bezcelowe.
aevanko
1
Wszystko, co musisz zrobić, to "= CocatenateRange (A1: A10, CHAR (10))", przekazując CHAR (10), przekazując znak nowego wiersza. :)
aevanko
1
Świetne rzeczy. Zmodyfikowano za pomocą Else newString = newString & (separator & Space(1))as, muszę zachować stałą szerokość w wynikowym ciągu.
Sir Crispalot,
149

Jeśli wolisz to zrobić bez VBA, możesz spróbować następujących rozwiązań:

  1. Umieść swoje dane w komórkach A1: A999 (lub takich)
  2. Ustaw komórkę B1 na „= A1”
  3. Ustaw komórkę B2 na „= B1 i A2”
  4. Skopiuj komórkę B2 aż do B999 (np. Kopiując B2, wybierając komórki B3: B99 i wklejając)

Komórka B999 będzie teraz zawierała konkatenowany ciąg tekstowy, którego szukasz.

Mischinab
źródło
2
Jeśli chcesz skopiować wartość: - Skopiuj (ctrl + c) ostatnią komórkę (B999), kliknij pustą komórkę i na karcie Strona główna w grupie Schowek pod ikoną Wklej kliknij Wklej wartości.
Kanishka
9
To marnotrawstwo, ale genialne!
BH
14
Nie jest to wcale marnotrawstwo w przypadku jednorazowej pracy (a takie pytania zwykle bywają). Jest to droga do zrobienia, ponieważ pozwala zobaczyć, co się dzieje, a ponadto możesz łatwo zmodyfikować operację łączenia (dodać separatory itp.). W przypadku jednorazowych prac VBA jest jak złamanie orzecha za pomocą młota.
PeerBr
1
To nie działa z dużymi zestawami danych. (Out of Memory)
Daniel
1
To jest genialne.
poszukiwacz
42

Wewnątrz CONCATENATEmożesz użyć, TRANSPOSEjeśli go rozwiniesz ( F9), a następnie usuń otaczające {}nawiasy, jak to zaleca

=CONCATENATE(TRANSPOSE(B2:B19))

Staje się

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

CONCATENATE (TRANSPOSE (B2: B19))

Może być konieczne dodanie własnego separatora na końcu, powiedzmy, że utwórz kolumnę C i transponuj tę kolumnę.

=B1&" "
=B2&" "
=B3&" "
KCD
źródło
2
Głosuj na fantazyjną ilustrację .gif
N_E
24

W prostych przypadkach możesz użyć następnej metody, która nie wymaga tworzenia funkcji ani kopiowania kodu do kilku komórek:

  1. W dowolnej komórce napisz następny kod

    =Transpose(A1:A9) 
    

Gdzie A1: A9 to komórki, które chcesz scalić.

  1. Bez wychodzenia z prasy komórkowej F9

Następnie komórka będzie zawierać ciąg:

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

Źródło: http://www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/

Aktualizacja: jedna część może być niejednoznaczna. Bez wychodzenia z komórki oznacza, że ​​Twoja komórka działa w trybie edytora. Alternatywnie możesz nacisnąć F9, gdy jesteś w panelu edytora komórek (normalnie można go znaleźć nad arkuszem kalkulacyjnym)

y.selivonchyk
źródło
Cokolwiek to było, był to niezły pomysł, ale nie zadziałał. Zakładam, że ponieważ mój tekst zawierał wiele znaków specjalnych, nie połączył ich we właściwe wyjście. Skończyło się na ręcznym wpisaniu a1, b1 i c1 i ......
Chris Marisic
1
Chris, dziwną częścią tego rozwiązania jest to, że przed naciśnięciem klawisza F9 musisz skupić się na komórce. Przez „zachowaj fokus” mam na myśli mruganie kursorem edytora i możliwość kontynuowania wpisywania tekstu.
y.selivonchyk,
1
Naciśnięcie klawisza F9 nie działa w wersji programu Excel na komputery Mac.
Adam Eberlin
15

Użyj już istniejącej Joinfunkcji VBA . Funkcje VBA nie są ujawniane w programie Excel, więc zawijam Joinfunkcję zdefiniowaną przez użytkownika, która ujawnia jej funkcjonalność. Najprostsza forma to:

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

Przykładowe użycie:

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

wprowadzane jako formuła tablicowa (za pomocą Ctrl- Shift- Enter).

wprowadź opis obrazu tutaj


Teraz JoinXLakceptuje tylko jednowymiarowe tablice jako dane wejściowe. W programie Excel zakresy zwracają tablice dwuwymiarowe. W powyższym przykładzie TRANSPOSEkonwertuje dwuwymiarową tablicę 4 × 1 na 4-elementową jednowymiarową tablicę (jest to udokumentowane zachowanie, TRANSPOSEgdy jest zasilana jednokolumnową dwuwymiarową tablicą).

W przypadku zakresu poziomego musiałbyś zrobić podwójną TRANSPOSE:

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

Wewnętrzna TRANSPOSEkonwertuje dwuwymiarową tablicę 1 × 4 na dwuwymiarową tablicę 4 × 1, którą zewnętrzną TRANSPOSEkonwertuje następnie na oczekiwaną 4-elementową jednowymiarową tablicę.

wprowadź opis obrazu tutaj

To użycie TRANSPOSEjest dobrze znanym sposobem konwertowania tablic 2D na tablice 1D w programie Excel, ale wygląda okropnie. Bardziej eleganckim rozwiązaniem byłoby ukrycie tego w JoinXLfunkcji VBA.

Jean-François Corbett
źródło
1
W dużej tabeli ta funkcja jest znacznie szybsza niż funkcja @aevanko.
Ricidleiv Tondatto
9

Dla tych, którzy mają Excel 2016 (i przypuszczam, że następne wersje), istnieje teraz bezpośrednio funkcja CONCAT , która zastąpi funkcję CONCATENATE .

Tak więc prawidłowy sposób na zrobienie tego w programie Excel 2016 to:

=CONCAT(A1:A4)

który wyprodukuje:

Jestem chłopcem

W przypadku użytkowników starszych wersji programu Excel inne odpowiedzi są istotne.

gvo
źródło
1
Mam zainstalowany pakiet Office 2016 ProPlus dla systemu Windows i nie ma ŻADNEJ CONCATfunkcji
oleksa
Microsoft twierdzi, że CONCAT jest dostępny w Excel 365 i 2019: support.microsoft.com/en-us/office/ ...
Ray Woodcock
4

W przypadku programu Excel 2011 na komputerze Mac jest inaczej. Zrobiłem to w trzech etapach.

  1. Utwórz kolumnę wartości w kolumnie A.
  2. W kolumnie B, po prawej stronie pierwszej komórki, utwórz regułę, która używa funkcji konkatenacji do wartości kolumny i „,”. Na przykład zakładając, że A1 jest pierwszym wierszem, wzór na B1 to =B1. Formuła dla następnego wiersza do wiersza N to =Concatenate(",",A2). Kończysz z:
QA
, Sekuli
, Testowanie
, Applitools
, Badania wizualne
, Automatyzacja testów
,Selen
  1. W kolumnie C utwórz formułę, która połączy wszystkie poprzednie wartości. Ponieważ jest to dodatek, otrzymasz wszystko na końcu. Formuła dla komórki C1 to =B1. Dla wszystkich innych wierszy do N formuła to =Concatenate(C1,B2). Otrzymujesz:
QA, Sekuli
QA, Sekuli, Testowanie
QA, Sekuli, Testing, Applitools
QA, Sekuli, Testowanie, Applitools, Testy wizualne
QA, Sekuli, Testowanie, Applitools, Testowanie wizualne, Automatyzacja testów
QA, Sekuli, Testowanie, Applitools, Testowanie wizualne, Automatyzacja testów, Selenium

Ostatnia komórka na liście będzie tym, czego chcesz. Jest to zgodne z programem Excel w systemie Windows lub Mac.

Chris Riley
źródło
możliwe jest konkatenowanie trzech wartości w jednej formule. Mam wartości w kolumnie A, B1 to kopia A1 i B2 z formułą podobną do =CONCATENATE(B1;",";A2). Następnie musisz przeciągnąć prawą kropkę w komórce dla wszystkich wierszy, a ostatnia wartość będzie wynikiem
oleksa
2

Używam tej CONCATENATEmetody, aby pobrać wartości z kolumny i zawijać wokół nich cudzysłowy kolumnami między nimi, aby szybko wypełnić WHERE IN ()klauzulę instrukcji SQL.

I zawsze po prostu wpisać =CONCATENATE("'",B2,"'",","), a następnie wybrać, które i przeciągnij go w dół, co powoduje =CONCATENATE("'",B3,"'",","),=CONCATENATE("'",B4,"'",",") itp następnie podkreślić, że całą kolumnę, kopia wklej do zwykłego edytora tekstu i wkleić z powrotem w razie potrzeby, a tym samym pozbawiając separację wiersza. Działa, ale znowu, tak jak jednorazowa okazja, nie jest to dobre rozwiązanie dla kogoś, kto potrzebuje tego cały czas.

GoldPaintedLemons
źródło
0

Wiem, że to naprawdę stare pytanie, ale próbowałem zrobić to samo i natknąłem się na nową formułę w programie Excel o nazwie „TEXTJOIN”.

W przypadku pytania poniższa formuła rozwiązuje problem

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

Podpis „TEXTJOIN” jest wyjaśniony jako TEXTJOIN (separator, ignoruj_pusty, tekst1, [tekst2], [tekst3], ...)

Nick Allen
źródło
Microsoft twierdzi, że TEXTJOIN jest dostępny dla Excel 365 i 2019: support.microsoft.com/en-us/office/ ...
Ray Woodcock