Làm thế nào để hợp nhất các hàng trong một cột thành một ô trong excel?


80

Ví dụ

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

Tôi muốn hợp nhất tất cả chúng thành một ô duy nhất "Iamaboy"
Ví dụ này cho thấy 4 ô hợp nhất thành 1 ô tuy nhiên tôi có nhiều ô (hơn 100), tôi không thể gõ từng ô một bằng cách sử dụng A1 & A2 & A3 & A4Tôi có thể làm gì?


Tất cả chúng đều nằm trong nhóm 4 hàng dọc? hay bạn muốn tất cả cột A trong một ô duy nhất?
Alex K.

Chúng tôi có thể chỉnh sửa câu hỏi này để có thẻ Excel-VBA, với câu trả lời được chấp nhận trong VBA không? Thêm vào đó, có những câu hỏi như thế này luôn được hỏi và tôi muốn đánh dấu những câu hỏi đó là trùng lặp vì có câu trả lời ở đây.
bonCodigo

Câu trả lời:


87

Tôi giới thiệu cho bạn chức năng VBA ConcatenateRange của tôi (cảm ơn Jean về lời khuyên đặt tên!). Nó sẽ lấy một loạt các ô (bất kỳ chiều nào, bất kỳ hướng nào, v.v.) và hợp nhất chúng lại với nhau thành một chuỗi duy nhất. Là một tham số thứ ba tùy chọn, bạn có thể thêm một bộ tách (như dấu cách hoặc dấu phẩy được phân tách).

Trong trường hợp này, bạn sẽ viết cái này để sử dụng nó:

=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
Điều này là không cần thiết, trong khi chức năng chỉ cần thêm một = A1 & A2 & A3 & A4 là đủ và thêm A1 & "" & A2 & "" & A3 & "" & A4 sẽ cung cấp cho bạn khoảng cách giữa các giá trị của mỗi ô.
Michael Eakins

3
+1 nhưng tôi sẽ gọi nó ConcatenateRange! Excel ngu ngốc CONCATENATEchức năng sẽ không chấp nhận một loạt như một đầu vào, chỉ có một danh sách các tế bào riêng lẻ như các đối số riêng biệt ...
Jean-François Corbett

10
Cảm ơn Jean! Tôi đã thông qua đề xuất của bạn! Michael, bạn đã bỏ lỡ vấn đề - làm điều đó cho hàng trăm ô thật tẻ nhạt và vô nghĩa.
aevanko

1
ALl bạn phải làm là "= CocatenateRange (A1: A10, CHAR (10))" bằng cách chuyển CHAR (10) là bạn đang chuyển ký tự dòng mới. :)
aevanko

1
Công cụ tuyệt vời. Được sửa đổi với Else newString = newString & (separator & Space(1))khi tôi cần giữ lại chiều rộng cố định trong chuỗi kết quả của mình.
Sir Crispalot

149

Nếu bạn muốn làm điều này mà không cần VBA, bạn có thể thử các cách sau:

  1. Có dữ liệu của bạn trong các ô A1: A999 (hoặc tương tự)
  2. Đặt ô B1 thành "= A1"
  3. Đặt ô B2 thành "= B1 & A2"
  4. Sao chép toàn bộ ô B2 xuống B999 (ví dụ: bằng cách sao chép B2, chọn các ô B3: B99 và dán)

Ô B999 bây giờ sẽ chứa chuỗi văn bản nối mà bạn đang tìm kiếm.


2
Nếu bạn muốn sao chép giá trị: - Sao chép (ctrl + c) ô cuối cùng (B999), bấm vào ô trống và trên tab Trang đầu, trong nhóm Bảng tạm, dưới biểu tượng Dán, bấm Dán Giá trị.
Kanishka

9
Điều này là lãng phí, nhưng loại tuyệt vời!
BH

14
Điều này không lãng phí chút nào cho công việc chỉ làm một lần (mà những câu hỏi như vậy thường là như vậy). Đó là cách để đi vì nó cho phép bạn xem những gì đang diễn ra, ngoài ra bạn có thể sửa đổi thêm thao tác tham gia một cách dễ dàng (thêm dấu phân cách, v.v.). Đối với những công việc chỉ diễn ra một lần, VBA giống như bẻ một cái đai ốc bằng một cái búa tạ.
PeerBr

1
Điều này không hoạt động với các tập dữ liệu lớn. (Hết trí nhớ)
Daniel

1
Đây là thiên tài.
người tìm kiếm

41

Bên trong CONCATENATEbạn có thể sử dụng TRANSPOSEnếu bạn mở rộng nó ( F9) sau đó loại bỏ các {}dấu ngoặc nhọn xung quanh như đề xuất này

=CONCATENATE(TRANSPOSE(B2:B19))

Trở thành

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

CONCATENATE (VẬN CHUYỂN (B2: B19))

Bạn có thể cần thêm dấu phân tách của riêng mình vào cuối, giả sử tạo cột C và chuyển vị cột đó.

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

2
UpVote cho hình minh họa .gif ưa thích
N_E

24

Trong những trường hợp đơn giản, bạn có thể sử dụng phương pháp tiếp theo không yêu cầu bạn tạo một hàm hoặc sao chép mã vào một số ô:

  1. Trong bất kỳ ô nào, hãy viết mã tiếp theo

    =Transpose(A1:A9) 
    

Trong đó A1: A9 là các ô bạn muốn hợp nhất.

  1. Không cần rời khỏi ô nhấn F9

Sau đó, ô sẽ chứa chuỗi:

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

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

Cập nhật: Một phần có thể không rõ ràng. Không rời khỏi ô có nghĩa là ô của bạn đang ở chế độ chỉnh sửa. Thay thế, bạn có thể nhấn F9 khi đang ở trong bảng điều khiển của trình chỉnh sửa ô (thông thường, bạn có thể tìm thấy nó phía trên bảng tính)


Dù đây là gì, đây là một ý tưởng hay, tuy nhiên nó không hiệu quả với tôi. Tôi giả sử vì văn bản của tôi có rất nhiều ký tự đặc biệt, nó không kết hợp chúng thành đầu ra phù hợp. Tôi đã kết thúc bằng tay gõ a1 & b1 & c1 & ......
Chris Marisic

1
Chris, một phần kỳ lạ trong giải pháp này là bạn phải luôn tập trung vào ô trước khi nhấn F9. Và bằng cách "giữ tiêu điểm", ý tôi là bạn phải nhấp nháy con trỏ trình chỉnh sửa và có thể Tiếp tục nhập văn bản.
y.selivonchyk

1
Đánh F9 không hoạt động trên phiên bản excel của Mac.
Adam Eberlin

15

Sử dụng Joinchức năng đã có của VBA . Các hàm VBA không được hiển thị trong Excel, vì vậy tôi gói Jointrong một hàm do người dùng xác định để hiển thị chức năng của nó. Hình thức đơn giản nhất là:

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

Ví dụ sử dụng:

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

được nhập dưới dạng công thức mảng (sử dụng Ctrl- Shift- Enter).

nhập mô tả hình ảnh ở đây


Bây giờ, JoinXLchỉ chấp nhận mảng một chiều làm đầu vào. Trong Excel, phạm vi trả về mảng hai chiều. Trong ví dụ trên, TRANSPOSEchuyển đổi mảng hai chiều 4 × 1 thành mảng một chiều 4 phần tử (đây là hành vi được ghi lại TRANSPOSEkhi nó được cung cấp bằng mảng hai chiều một cột).

Đối với phạm vi ngang, bạn sẽ phải thực hiện gấp đôi TRANSPOSE:

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

Bên trong TRANSPOSEchuyển đổi mảng 2 chiều 1 × 4 thành mảng hai chiều 4 × 1, mảng bên ngoài TRANSPOSEsau đó chuyển đổi thành mảng một chiều 4 phần tử được mong đợi.

nhập mô tả hình ảnh ở đây

Cách sử dụng TRANSPOSEnày là một cách nổi tiếng để chuyển đổi mảng 2D thành mảng 1D trong Excel, nhưng nó trông rất tệ. Một giải pháp thanh lịch hơn sẽ là ẩn điều này đi trong JoinXLhàm VBA.


1
Trong bảng lớn, hàm này nhanh hơn nhiều so với hàm của @aevanko.
Ricidleiv Tondatto

9

Đối với những người có Excel 2016 (và tôi cho rằng các phiên bản tiếp theo), bây giờ có trực tiếp hàm CONCAT , hàm này sẽ thay thế hàm CONCATENATE .

Vì vậy, cách chính xác để làm điều đó trong Excel 2016 là:

=CONCAT(A1:A4)

sẽ tạo ra:

Tôi là con trai

Đối với người dùng phiên bản Excel cũ hơn, các câu trả lời khác có liên quan.


1
Tôi có Office 2016 ProPlus cho Windows cài đặt và có NO CONCATchức năng
oleksa

Microsoft cho biết CONCAT có sẵn trong Excel 365 và 2019: support.microsoft.com/en-us/office/…
Ray Woodcock

4

Đối với Excel 2011 trên Mac thì khác. Tôi đã làm nó như một quy trình ba bước.

  1. Tạo một cột giá trị trong cột A.
  2. Trong cột B, ở bên phải ô đầu tiên, hãy tạo quy tắc sử dụng hàm nối trên giá trị cột và ",". Ví dụ, giả sử A1 là hàng đầu tiên, công thức của B1 là =B1. Đối với hàng tiếp theo đến hàng N, công thức là =Concatenate(",",A2). Bạn kết thúc với:
QA
, Sekuli
, Thử nghiệm
, Applitools
, Kiểm tra trực quan
, Tự động hóa Kiểm tra
, Selen
  1. Trong cột C, hãy tạo một công thức nối tất cả các giá trị trước đó. Bởi vì nó là phụ gia, bạn sẽ nhận được tất cả ở cuối. Công thức cho ô C1 là =B1. Đối với tất cả các hàng khác đến N, công thức là =Concatenate(C1,B2). Và bạn nhận được:
QA, Sekuli
QA, Sekuli, Thử nghiệm
QA, Sekuli, Thử nghiệm, Applitools
QA, Sekuli, Kiểm tra, Applitools, Kiểm tra trực quan
QA, Sekuli, Kiểm tra, Applitools, Kiểm tra trực quan, Tự động hóa kiểm tra
QA, Sekuli, Kiểm tra, Applitools, Kiểm tra trực quan, Tự động hóa Kiểm tra, Selenium

Ô cuối cùng của danh sách sẽ là ô bạn muốn. Điều này tương thích với Excel trên Windows hoặc Mac.


có thể nối ba giá trị trong một công thức. Tôi có các giá trị trong cột A, B1 là bản sao của A1 và B2 với công thức như thế nào =CONCATENATE(B1;",";A2). Sau đó, bạn phải kéo dấu chấm xuống ngay trong tế bào cho tất cả các hàng và giá trị cuối cùng sẽ là kết quả
oleksa

2

Tôi sử dụng CONCATENATEphương pháp để lấy các giá trị của một cột và đặt dấu ngoặc kép xung quanh chúng với các cột ở giữa để nhanh chóng điền WHERE IN ()mệnh đề của một câu lệnh SQL.

Tôi luôn chỉ nhập =CONCATENATE("'",B2,"'",","), sau đó chọn và kéo nó xuống, tạo =CONCATENATE("'",B3,"'",","), =CONCATENATE("'",B4,"'",",")v.v. sau đó đánh dấu toàn bộ cột đó, sao chép dán vào trình soạn thảo văn bản thuần túy và dán lại nếu cần, do đó loại bỏ sự phân tách hàng. Nó hoạt động, nhưng một lần nữa, chỉ là thỏa thuận một lần, đây không phải là giải pháp tốt cho những người luôn cần điều này.


0

Tôi biết đây thực sự là một câu hỏi thực sự cũ, nhưng tôi đang cố gắng làm điều tương tự và tôi tình cờ phát hiện ra một công thức mới trong excel có tên "TEXTJOIN".

Đối với câu hỏi, công thức sau giải quyết vấn đề

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

Chữ ký của "TEXTJOIN" được giải thích là TEXTJOIN (dấu phân cách, ignore_empty, text1, [text2], [text3], ...)


Microsoft cho biết TEXTJOIN có sẵn cho Excel 365 và 2019: support.microsoft.com/en-us/office/…
Ray Woodcock
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.