Nối các chuỗi ở các ô với nhau

Liên hệ QC

letuongqt

Thành viên hoạt động
Tham gia
26/3/08
Bài viết
141
Được thích
24
Nhờ các thành viên chỉ giúp : Tôi có 3 ô chứa ký tự (chuỗi) , nay tôi muốn nối chúng lại với nhau thành chuỗi trong 1 cell với điều kiện giữa các ký tự phải ngăn bởi dấu "," hoặc khoảng trắng nào đó - có thể có cell rỗng giữa 3 ô chưa ký tự . Nhờ các bạn chỉ giúp (tôi cũng đã dùng hàm & nhưng kết quả chưa đạt) .Xin cảm ơn rất nhiều .
Tôi gởi file đính kèm - kết quả file này tôi muốn là : Xoài,Mận,Cam
 

File đính kèm

Dùng thử công thức này:
G3=A3&","&B3&","&F3
 
Nối các chuỗi ở các ô khác nhau

Tôi muốn cột C,D,E vẫn tham gia vào công thức (Bởi vì bảng dữ liệu có rất nhiều dòng ; tuy C2,D2,E2 rỗng nhưng ở các dòng khác lại có dữ liệu ; Tức là tôi muốn thiết lập công thức cho cả 1 dòng gồm nhiều ô , để sau đó coppy xuổng hết bảng dữ liệu ) .- Hàm như bạn ptm0412 nêu trên tôi cũng đã áp dụng nhưng kết quả không như mong muốn . Nhờ các bạn chỉ giúp. Xin cảm ơn .
 
Vậy phải nêu rõ câu hỏi, và ví dụ phải đủ trường hợp.
Nếu không còn trường hợp nào nữa thì:
G3=A3&","&B3&if(C3="","",","&C3)&if(D3="","",","&D3)&If(E3="","",","&E3)&","&F3
Nếu cả B3 và F3 cũng cà giựt cà tàng thì If nó luôn.
(Không phải nói người đâu nhe)
 
Nối các ô dữ liệu

Vậy phải nêu rõ câu hỏi, và ví dụ phải đủ trường hợp.
Nếu không còn trường hợp nào nữa thì:
G3=A3&","&B3&if(C3="","",","&C3)&if(D3="","",","&D3)&If(E3="","",","&E3)&","&F3
Nếu cả B3 và F3 cũng cà giựt cà tàng thì If nó luôn.
(Không phải nói người đâu nhe)

Tôi muốn công thức phải mang tính tổng quát . Ở VD này các chuỗi trong các ô xuất hiện một cách bất kỳ không theo một quy định nào , vì vậy ở dòng này có 1 hoặc nhiều ô rỗng nhưng ở dòng khác vẫn có thể là có chứa dữ liệu ( Bảng gồm có 50 dòng , mồi dòng có 12 ô , và 1 ô hiện kết quả sau khi nối ) . Do đó , công thức mà bạn đưa ra vẫn chưa giải quyết được vấn đề .Xin cảm ơn
 
Như vậy là đúng là nói người rồi đấy. Vì nếu bây giờ cho công thức 12 if cho 12 ô, nó nhảy tửng lên thành 20 ô, thì trời cứu.
Tôi có 3 ô chứa ký tự (chuỗi) , nay tôi muốn nối chúng lại với nhau thành chuỗi trong 1 cell
Tôi muốn cột C,D,E vẫn tham gia vào công thức
Bảng gồm có 50 dòng , mồi dòng có 12 ô , và 1 ô hiện kết quả sau khi nối )

Dự báo:
Dãy có 25 ô, 12 ô ở sheet1, 8 ô ở sheet 2, 5 ô ở sheet 3
12 ô sheet 1 theo hàng, 8 ô sheet 2 theo cột, 5 ô sheet 3 theo đường chéo
 
Tôi muốn công thức phải mang tính tổng quát . Ở VD này các chuỗi trong các ô xuất hiện một cách bất kỳ không theo một quy định nào , vì vậy ở dòng này có 1 hoặc nhiều ô rỗng nhưng ở dòng khác vẫn có thể là có chứa dữ liệu ( Bảng gồm có 50 dòng , mồi dòng có 12 ô , và 1 ô hiện kết quả sau khi nối ) . Do đó , công thức mà bạn đưa ra vẫn chưa giải quyết được vấn đề .Xin cảm ơn
Muốn tổng quát thì dùng name vậy
Tại B3, nhấn Ctr F3 và nhập cotB, refers to là =IF(Sheet1!$B3="","",","&Sheet1!$B3)
Tương tự C3....L3
Và tại M3=A3&cotB&cotC...&cotL
Tương tự M4...
 
Dự báo:
Dãy có 25 ô, 12 ô ở sheet1, 8 ô ở sheet 2, 5 ô ở sheet 3
12 ô sheet 1 theo hàng, 8 ô sheet 2 theo cột, 5 ô sheet 3 theo đường chéo
Dự báo tiếp: Dãy có.. ko biết mấy ô... nằm ở.. tùm lum các file đâu đó trên máy tính... (Có trên máy tính của ta hoặc máy tính của ai đó)
Hic... hic...
Đưa file thực tế lên đi đồng chí ơi, ví dụ hoài sư phụ đau tim mất
ANH TUẤN
 
Tôi muốn công thức phải mang tính tổng quát . Ở VD này các chuỗi trong các ô xuất hiện một cách bất kỳ không theo một quy định nào , vì vậy ở dòng này có 1 hoặc nhiều ô rỗng nhưng ở dòng khác vẫn có thể là có chứa dữ liệu ( Bảng gồm có 50 dòng , mồi dòng có 12 ô , và 1 ô hiện kết quả sau khi nối ) . Do đó , công thức mà bạn đưa ra vẫn chưa giải quyết được vấn đề .Xin cảm ơn
Bạn thử file củ chuối này xem có được không.
 

File đính kèm

Lần chỉnh sửa cuối:
Nếu vùng dữ liệu của bạn thay khoảng trống thành 0 thì mình có thể rút ngắn Ct của bạn Salam như sau:
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LK,",0",""),"0,", ""),"0","")
Nhưng mình thấy vùng Ct thì ko ổn chút nào.
Khi thêm cột thì phải thay lại ct, Khi cột nhiều thì việc viết ct cho name "LK" sẽ gặp khó khăn.
Vậy nhờ các Bác trên diễn đàn hổ trợ bằng 1 hàm tự tạo của VBA.
Chẳng hạn như: NoiChuoi(Range): Trong đó range là vùng cần link.
Cảm ơn mọi người trước nha.
 

File đính kèm

Lần chỉnh sửa cuối:
Vậy nhờ các Bác trên diễn đàn hổ trợ bằng 1 hàm tự tạo của VBA. Chẳng hạn như: NoiChuoi(Range): Trong đó range là vùng cần link.
Cảm ơn mọi người trước nha.
Hàm nối chuỗi mà bạn iêu cầu đây:
PHP:
Option Explicit

Function NoiChuoi(Rng As Range) As Variant
 Dim Clls As Range
 For Each Clls In Rng
    If Clls <> "" Then _
        NoiChuoi = NoiChuoi & ", " & Clls
 Next Clls
 NoiChuoi = Mid(NoiChuoi, 2)
End Function
 
Cảm ơn Bác SA_DQ!
Em cũng tự làm được 1 cái cho mình rồi.Hì.
Có hơi tệ 1 chút, nhưng là lần đầu tiên em viết về VBA về Function mà.
Vui quá!
Function NoiCot(Rgn As Range) As String
Dim R As Byte, CB As Byte, i As Byte, CE As Byte
R = Rgn.Row
CB = Rgn.Column
CE = Range(Right(Rgn.Address, 4)).Column
NoiCot = Cells(R, CB)
For i = CB + 1 To CE - 1
NoiCot = NoiCot & "," & Cells(R, i).Formula
Next i

NoiCot = Application.WorksheetFunction.Substitute(NoiCot, ",0", "")
NoiCot = Application.WorksheetFunction.Substitute(NoiCot, "0,", "")
NoiCot = Application.WorksheetFunction.Substitute(NoiCot, "0", "")
End Function
 
Nếu dùng công thức thì thuật toán của bài này như sau:
1> Nối từng cell lại, xen giữa là 1 ký tự rổng (A1&" "&B1&" "&....)
2> Lồng hàm TRIM vào để cắt những khoảng trắng thừa
3> Cuối cùng thay khoảng trắng bằng ký tự ", " :
Mã:
=SUBSTITUTE(TRIM(A1&" "&B1&" "....)," ",", ")
Rất đơn giản!
Muốn gọn hơn 1 chút thì chỉ cần đặt 1 name:
Mã:
NOI = A1&" "&B1&" "&....
Mạn phép mượn file của Salam thực hiện bài toán này!
ANH TUẤN
 

File đính kèm

Bác Tuấn ơi nếu Bác dùng dấu cách xong thay thế = "," hi hi ... tên có hai chữ trở lên sẽ ... Bác xem lại xem.
 
Em cũng tự làm được 1 cái cho mình rồi.Hì.
Có hơi tệ 1 chút, nhưng là lần đầu tiên em viết về VBA về Function mà.
Vui quá!
Chắc đêm qua bạn ngủ rất ngon & có giấc mơ rất đẹp về VBA & về GPE.COM nói chung?!
Bạn đã làm được 1 cái mà trước đây mình phải vài ba tháng sau mới thực hiện được. Chỉ vì trước đây mình chưa thể có GPE.COM bên mình!!

Với đoạn code của bạn, mình xin góp í. Mục đích của mình nhằm để bạn đúng ngay từ đầu; Những góp í đó như sau:
(Phải nói trước, những góp ý này là không bắt buộc, Nhưng nó tương tự như những lời khuyên, đại loại là: Bạn không nên đi bộ 1 chân trên vĩa hè & 1 chân dưới lòng đường, cho dù 'Xã hội' không cấm!)
a/* Bạn khai báo biến R As Byte là không nên; vì biến này bạn sẽ gán số dòng trong trang tính; Mà số dòng có Type hơn cả Integer;
Một khi sau này, bạn có 1 macro thật hùng vĩ; e rằng thói quen này có lúc phản lại bạn;
b/* Tên biên không nên chỉ là 1 chữ cái (trong tác fẩm của bạn, đó là R & i); Vì rằng, sẽ có lúc cảm thấy cần đổi tên biến bằng công cụ Replace (với macro vĩ đại). Khi đó công cụ này nó đổi hết các chữ R hay i có trong macro thì dễ tiêu đời cái macro còn gì!!
Mặc khác ta còn tận dụng lời thế của trình biên dịch, một khi ta có biến Rr hay iI đã khai báo thì dễ kiểm soát khi gõ sai chính tả thành ra eR hay iU

Những thói quen nhỏ nhặc í mà; nhưng sẽ đỡ tốn thời gian sau này lắm đó, một khi hàng ngày bạn sẽ sàn sinh ra gần trăm cái macro cho mình & cho xã hội nhiều người dùng
imagesCA9A2LND.jpg
. . . . . .
 
Bác Tuấn ơi nếu Bác dùng dấu cách xong thay thế = "," hi hi ... tên có hai chữ trở lên sẽ ... Bác xem lại xem.
Là sao? Tôi chưa hiểu lắm! Salam có thể nói rõ hơn chút ko?
-----------------------
Ah... tôi hiểu rồi... tên là vú sữa thì khi nối lại nó thành vú, sữa... ha.. ha.. Ko sao! Đây chỉ là giãi pháp, tôi nghĩ dử liệu thực tế của tác giả rất có thể là nối tên các TK hay MA gì đó lại với nhau.. và nếu thế thì tên sẽ chỉ có 1 từ...
ANH TUẤN
 
Lần chỉnh sửa cuối:
To: Bác Tuấn
Em xin phép sửa lại công thức của bác một chút nhé???
Mã:
=SUBSTITUTE((A1&", "&B1&", "&C1.....),", , ",", ")
-------------
Công thức trên vẫn chưa được ổn lắm vì nếu ô đầu tiên hoặc ô cuối cùng không có dữ liệu thì sẽ thừa dấu ", ".
Tôi đã có cách giải quyết nhưng công thức lại quá dài nên chưa dám đưa lên. Xin ý kiến của các bác.
 
Lần chỉnh sửa cuối:
To: Bác Tuấn
Em xin phép sửa lại công thức của bác một chút nhé???
Mã:
=SUBSTITUTE((A1&", "&B1&", "&C1.....),", , ",", ")
-------------
Công thức trên vẫn chưa được ổn lắm vì nếu ô đầu tiên hoặc ô cuối cùng không có dữ liệu thì sẽ thừa dấu ", ".
Tôi đã có cách giải quyết nhưng công thức lại quá dài nên chưa dám đưa lên. Xin ý kiến của các bác.
Đâu có đâu bạn! Tôi có lồng hàm TRIM vào mà... nên sẽ ko có chuyện thừa dấu ", " dc! Bạn xem lại thử!
ANH TUẤN
 
Đâu có đâu bạn! Tôi có lồng hàm TRIM vào mà... nên sẽ ko có chuyện thừa dấu ", " dc! Bạn xem lại thử!
ANH TUẤN
Thưa bác, mục đích cái công thức của em là để khắc phục lỗi mà bác Salam đã chỉ ra trong công thức của bác thôi.
 
Chắc đêm qua bạn ngủ rất ngon & có giấc mơ rất đẹp về VBA & về GPE.COM nói chung?!
Hì.Đúng là 1 đêm tất vui của em.Cảm ơn Bác vì những lời khuyên bổ ích trên.
Hiện tại em rất cần những thứ như vậy.Chúc Bác và gđình mình 1 ngày dzui dzẻ.
 
Web KT

Bài viết mới nhất

Back
Top Bottom