Nối nhiều chuỗi trong excel

Liên hệ QC

HAiNV

Thành viên mới
Tham gia
25/6/06
Bài viết
13
Được thích
5
Chào các bác!
Em có vấn đề này nhờ các bác giúp đỡ:
* Nội dung text trong ô A1 là: "- Công ty TNHH Tân Mai"
B1 là: "- Công ty TNHH Trường An"
C1 là: "- Công ty TNHH XD & TM Nguyên Vi"
* Em muốn nối cả 3 text trên A1, B1, C1 và chứa vào ô D1 (có dấu ngắt xuống dòng, như mình ấn Alt + Enter khi nhập chuỗi trong excel ấy), để được ô D1:
- Công ty TNHH Tân Mai ' dòng 1
- Công ty TNHH Trường An 'dòng 2
- Công ty TNHH XD & TM Nguyên Vi ' dòng 3
Nhờ các bác giải quyết giúp em với!
Em cảm ơn các bác trước!
 
Chào các bác!
Em có vấn đề này nhờ các bác giúp đỡ:
* Nội dung text trong ô A1 là: "- Công ty TNHH Tân Mai"
B1 là: "- Công ty TNHH Trường An"
C1 là: "- Công ty TNHH XD & TM Nguyên Vi"
* Em muốn nối cả 3 text trên A1, B1, C1 và chứa vào ô D1 (có dấu ngắt xuống dòng, như mình ấn Alt + Enter khi nhập chuỗi trong excel ấy), để được ô D1:
- Công ty TNHH Tân Mai ' dòng 1
- Công ty TNHH Trường An 'dòng 2
- Công ty TNHH XD & TM Nguyên Vi ' dòng 3
Nhờ các bác giải quyết giúp em với!
Em cảm ơn các bác trước!
Dùng hàm sau
D1=A1&CHAR(10)&B1&CHAR(10)&C1 --> Sau đó kéo xuống.
Nhớ chiọn Wrap Text nhé
 
Lần chỉnh sửa cuối:
Chào các bác!
Em có vấn đề này nhờ các bác giúp đỡ:
* Nội dung text trong ô A1 là: "- Công ty TNHH Tân Mai"
B1 là: "- Công ty TNHH Trường An"
C1 là: "- Công ty TNHH XD & TM Nguyên Vi"
* Em muốn nối cả 3 text trên A1, B1, C1 và chứa vào ô D1 (có dấu ngắt xuống dòng, như mình ấn Alt + Enter khi nhập chuỗi trong excel ấy), để được ô D1:
- Công ty TNHH Tân Mai ' dòng 1
- Công ty TNHH Trường An 'dòng 2
- Công ty TNHH XD & TM Nguyên Vi ' dòng 3
Nhờ các bác giải quyết giúp em với!
Em cảm ơn các bác trước!
Có 2 cách đơn giản:
=A1 & CHAR(10) & B1 & CHAR(10) & C1

=CONCATENATE(A1, CHAR(10), B1, CHAR(10), C1)​
Tuy nhiên, tại ô nhập công thức, bạn phải đánh dấu vào tùy chọn Wrap Text cho thuộc tính của ô (xem hình) thì mới có được kết quả như mong muốn.
attachment.php
 
Chào các bác!
Em có vấn đề này nhờ các bác giúp đỡ:
* Nội dung text trong ô A1 là: "- Công ty TNHH Tân Mai"
B1 là: "- Công ty TNHH Trường An"
C1 là: "- Công ty TNHH XD & TM Nguyên Vi"
* Em muốn nối cả 3 text trên A1, B1, C1 và chứa vào ô D1 (có dấu ngắt xuống dòng, như mình ấn Alt + Enter khi nhập chuỗi trong excel ấy), để được ô D1:
- Công ty TNHH Tân Mai ' dòng 1
- Công ty TNHH Trường An 'dòng 2
- Công ty TNHH XD & TM Nguyên Vi ' dòng 3
Nhờ các bác giải quyết giúp em với!
Em cảm ơn các bác trước!
Trước hết, bạn chọn ô D1, chọn Format\Cells\Alignment và đánh dấu tick tại vị trí Wrap text --> OK.
Sau đó bạn nhập cho D1 công thức sau:=A1&CHAR(10)&B1&CHAR(10)&C1
+-+-+-+Lúc gõ trả lời thì chưa thấy gì, đến hồi gửi trả lời thì thấy tới mấy bài trả lời trước rồi... ẹc ẹc
 
Lần chỉnh sửa cuối:
Trong ví dụ trên chỉ có 3 ô cần nối là Á, B1 và C1, có cách nào để nếu dữ liệu nhiều hơn mà mình không cần phải gõ công thức quá dài không mấy bac.
 
Trong ví dụ trên chỉ có 3 ô cần nối là Á, B1 và C1, có cách nào để nếu dữ liệu nhiều hơn mà mình không cần phải gõ công thức quá dài không mấy bac.
Có chớ. Chả cần gõ công thức nữa kìa.
Viết một cái code VBA, dùng vòng lặp nối hết chúng lại với nhau...
Đặt cho cái code đó một cái nút nhấn hoặc một cái phím tắt, rồi nhấn một cái, xong...
 
Có chớ. Chả cần gõ công thức nữa kìa.
Viết một cái code VBA, dùng vòng lặp nối hết chúng lại với nhau...
Đặt cho cái code đó một cái nút nhấn hoặc một cái phím tắt, rồi nhấn một cái, xong...
Với dữ liệu gốc nằm cùng 1 dòng hoặc cùng 1 cột thì chẳng cần vòng lập nào cũng viết được
Ai thử sức xem (viết hẳn thành 1 Function nha)
 

File đính kèm

  • Gop cac dong vao 1 cell.xls
    40 KB · Đọc: 524
Với dữ liệu gốc nằm cùng 1 dòng hoặc cùng 1 cột thì chẳng cần vòng lập nào cũng viết được
Ai thử sức xem (viết hẳn thành 1 Function nha)

Thử dùng hàm sau Thầy à
Mã:
Function JoinText(ByVal Cells As Range) As String

    JoinText = Join(WorksheetFunction.Transpose(Cells.Value), Chr(10))

End Function
 
Thử dùng hàm sau Thầy à
Mã:
Function JoinText(ByVal Cells As Range) As String

    JoinText = Join(WorksheetFunction.Transpose(Cells.Value), Chr(10))

End Function
Code trên chỉ đúng nếu dữ liệu nằm cùng 1 cột... Còn nếu dữ liệu nằm cùng 1 dòng thì sao?
Nói chung, UDF phải có tính tổng quát, dữ liệu nguồn được bố trí cùng dòng hay cùng cột đều xài được
Tôi đề xuất cái này:
PHP:
Function JoinText(ByVal SrcText, ByVal Sep As String)
  Dim Temp
  On Error GoTo Stp1
  With WorksheetFunction
    Temp = .Transpose(SrcText)
    GoTo Stp2
Stp1:
    Temp = .Transpose(.Transpose(SrcText))
Stp2:
    JoinText = Join(Temp, Sep)
  End With
End Function
Lưu ý: Biến SrcText tôi không khai báo dạng Range, vì thế dù dữ liệu nguồn là Range hay Array cũng xài được
 

File đính kèm

  • JoinText.xls
    21.5 KB · Đọc: 406
Lần chỉnh sửa cuối:
Code trên chỉ đúng nếu dữ liệu nằm cùng 1 cột... Còn nếu dữ liệu nằm cùng 1 dòng thì sao?
Nói chung, UDF phải có tính tổng quát, dữ liệu nguồn được bố trí cùng dòng hay cùng cột đều xài được
Tôi đề xuất cái này:
PHP:
Function JoinText(ByVal SrcText, ByVal Sep As String)
  Dim Temp
  On Error GoTo Stp1
  With WorksheetFunction
    Temp = .Transpose(SrcText)
    GoTo Stp2
Stp1:
    Temp = .Transpose(.Transpose(SrcText))
Stp2:
    JoinText = Join(Temp, Sep)
  End With
End Function
Lưu ý: Biến SrcText tôi không khai báo dạng Range, vì thế dù dữ liệu nguồn là Range hay Array cũng xài được

Còn 1 điểm cần cải thiện là không nên gộp những cell rỗng Thầy à.
 
@ Anh Ndu, đằng nào thì cũng là nối các giá trị theo từng hàng, vậy sao mình không đưa luôn cái dấu ngắt dòng vào trong hàm, thay vì dùng biến?
Em nghĩ, nếu đưa vào trong hàm luôn thì chỉ cần gõ tên hàm rồi dùng chuột quét khối ô cần nối lại với nhau, vậy có phải nhanh và tiện hơn không?
PHP:
Function JoinText(ByVal SrcText)
Dim Temp
On Error GoTo Stp1
  With WorksheetFunction
    Temp = .Transpose(SrcText)
    GoTo Stp2
Stp1:
    Temp = .Transpose(.Transpose(SrcText))
Stp2:
    JoinText = Join(Temp, Chr(10))
  End With
End Function
 
Còn 1 điểm cần cải thiện là không nên gộp những cell rỗng Thầy à.
Nếu tính đến vụ cell rỗng này thì ta lại quay về vòng lập For mất rồi ---> Vì thế thay vì sửa lại hàm tôi đề xuất chúng ta nên bố trí lại dữ liệu không có cell rổng ---> Mục đích giúp cho UDF của chúng ta đở "cực khổ"
@ Anh Ndu, đằng nào thì cũng là nối các giá trị theo từng hàng, vậy sao mình không đưa luôn cái dấu ngắt dòng vào trong hàm, thay vì dùng biến?
Em nghĩ, nếu đưa vào trong hàm luôn thì chỉ cần gõ tên hàm rồi dùng chuột quét khối ô cần nối lại với nhau, vậy có phải nhanh và tiện hơn không?
Vấn đề nằm ở chổ hàm này phải mang tính tổng quát ---> Người khác muốn nối chuổi bằng 1 dấu phân cách khác thì sao?
Vậy thì ta đưa biến Sep vào cho người dùng tự quyết định
 
Nếu tính đến vụ cell rỗng này thì ta lại quay về vòng lập For mất rồi ---> Vì thế thay vì sửa lại hàm tôi đề xuất chúng ta nên bố trí lại dữ liệu không có cell rổng ---> Mục đích giúp cho UDF của chúng ta đở "cực khổ"

Vấn đề nằm ở chổ hàm này phải mang tính tổng quát ---> Người khác muốn nối chuổi bằng 1 dấu phân cách khác thì sao?
Vậy thì ta đưa biến Sep vào cho người dùng tự quyết định
Hai cái câu em tô màu đỏ hình như nó.. choảng nhau, anh ơi...
Nếu nói như anh, hì hì, muốn "tổng quát" thì sao lại sợ "cực khổ"?
 
Bạn xem file đính kèm có được không?
Mã:
Function JoinText(Range As Range, Sep As String) As String
  Dim Clls As Range, Tmp As String
  For Each Clls In Range
    Tmp = Tmp & "-" & Clls.Value
  Next Clls
  [COLOR=magenta]JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)[/COLOR]
End Function
Trong VBA hình như cũng có "chim" mà sao lại WorksheetFunction.....nhỉ
Híc
 
Mã:
Function JoinText(Range As Range, Sep As String) As String
  Dim Clls As Range, Tmp As String
  For Each Clls In Range
    Tmp = Tmp & "-" & Clls.Value
  Next Clls
  [COLOR=magenta]JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)[/COLOR]
End Function
Trong VBA hình như cũng có "chim" mà sao lại WorksheetFunction.....nhỉ
Híc
Ẹc, bác cò ơi bác cò, lâu nay hăm chọt bác mà chưa có dịp...
"Chim" của Excel (WorksheetFunction) và "Chim" của VBA hỏng có giống nhau đâu à nghen. Không tin, "sờ" thử coi!
 
Hai cái câu em tô màu đỏ hình như nó.. choảng nhau, anh ơi...
Nếu nói như anh, hì hì, muốn "tổng quát" thì sao lại sợ "cực khổ"?
2 chuyện khác nhau mà Tường!
"cực khổ" ở đây là tôi muốn nói đến "tốc độ" làm việc cơ
Còn nếu muốn đở mất công (cho riêng bài này) thì:
PHP:
Function JoinText(ByVal SrcText, Optional Sep As String = vbLf)
  Dim Temp
  On Error GoTo Stp1
  With WorksheetFunction
    Temp = .Transpose(SrcText)
    GoTo Stp2
Stp1:
    Temp = .Transpose(.Transpose(SrcText))
Stp2:
    JoinText = Join(Temp, Sep)
  End With
End Function
Khi ấy, nếu bỏ qua biến Sep thì xem như là ta đang nối chuổi bằng dấu ngắt dòng
Mã:
Function JoinText(Range As Range, Sep As String) As String
  Dim Clls As Range, Tmp As String
  For Each Clls In Range
    Tmp = Tmp & "-" & Clls.Value
  Next Clls
  [COLOR=magenta]JoinText = Replace(WorksheetFunction.Trim(Tmp), "-", Sep)[/COLOR]
End Function
Trong VBA hình như cũng có "chim" mà sao lại WorksheetFunction.....nhỉ
Híc
Hàm "chim" trong VBA chỉ loại bỏ khoảng trắng 2 đầu chuổi thôi anh à (khúc giữa nó cóc chơi)
 
Lần chỉnh sửa cuối:
@ Anh Ndu, anh hiểu sai ý em rồi.
Ý em hỏng phải là đưa cái Chr(10) vào, mà ý em là "xơi tái" luôn mấy cái cell rỗng cơ!

... Hàm "chim" trong VBA chỉ loại bỏ khoảng trắng 2 đầu chuổi thôi anh à (khúc giữa nó có chơi)
Câu này phải nói vầy mới chính xác: "Khúc giữa nó ứ chơi"...
 
Lần chỉnh sửa cuối:
Ẹc, bác cò ơi bác cò, lâu nay hăm chọt bác mà chưa có dịp...
"Chim" của Excel (WorksheetFunction) và "Chim" của VBA hỏng có giống nhau đâu à nghen. Không tin, "sờ" thử coi!
Thầy ơi, theo mình bạn í muốn loại cái chỗ ni:
Tmp = Tmp & "-" & Clls.Value
Thì dùng "chim" trong VBA là được mà Thầy, nếu viết khác đi : Trim(replace.....) có đúng không Thầy?
Híc, học hoài mà vẫn chưa thông
 
@ Anh Ndu, anh hiểu sai ý em rồi.
Ý em hỏng phải là đưa cái Chr(10) vào, mà ý em là "xơi tái" luôn mấy cái cell rỗng cơ!
Vậy mình đưa ra các dữ kiện thế này:
- Dữ liệu được bố trí cùng dòng hoặc cùng cột
- Trong vùng dữ liệu có thể có cell rỗng
Yêu cầu:
- Dùng VBA nối các cell lại với nhau bằng 1 dấu phân cách nào đó nhưng bỏ qua các cell rỗng
- Code VBA không dùng vòng lập
------------------------------------
Tôi chưa làm nhưng vẫn có cảm giác rằng sẽ xử lý được đấy (đang có ý tưởng)
Các bạn thử xem!
 
Web KT
Back
Top Bottom