Hỏi về Hàm nối chuỗi theo điều kiện? (1 người xem)

  • Thread starter Thread starter KUMI
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

KUMI

Bụi phấn
Tham gia
17/1/12
Bài viết
564
Được thích
572
Xin chào Thầy Cô và Anh Chị trong GPE!
Em đang gặp phải một vướng mắc về Hàm nối chuỗi... Chi tiết vấn đề em đã viết cụ thể trong file đính kèm.
Thầy Cô và Anh Chị xem file rồi tìm cách giúp em với ạ!
Xin cảm ơn!
 

File đính kèm

Công thức hiện nay vẫn chưa đáp ứng được đâu, chắc phải dùng VBA thôi.
Còn nếu nối thủ công thì thêm TRIM và SUBSTITUTE để loại bỏ bớt các ô trống.
Nối chuỗi bằng công thức là vấn đề nhiều người quan tâm, rất mong các bậc tiền bối GPE dành thời gian ngâm cứu!
 
Tuy dai nhưng theo logic của bạn và đơn giản:

=E8&": ("&E9&IF($E10<>"","-"&E10,"")&IF($E11<>"","-"&E11,"")&IF($E12<>"","-"&E12,"")&IF($E13<>"","-"&E13,"")&IF($E14<>"","-"&E14,"")&IF($E15<>"","-"&E15,"")&IF($E16<>"","-"&E16,"")&IF($E17<>"","-"&E17,"")&IF($E18<>"","-"&E18,"")&IF($E19<>"","-"&E19,"")&IF($E20<>"","-"&E20,"")&IF($E21<>"","-"&E21,"")&IF($E22<>"","-"&E22&")",")")
 
Tuy dai nhưng theo logic của bạn và đơn giản:

=E8&": ("&E9&IF($E10<>"","-"&E10,"")&IF($E11<>"","-"&E11,"")&IF($E12<>"","-"&E12,"")&IF($E13<>"","-"&E13,"")&IF($E14<>"","-"&E14,"")&IF($E15<>"","-"&E15,"")&IF($E16<>"","-"&E16,"")&IF($E17<>"","-"&E17,"")&IF($E18<>"","-"&E18,"")&IF($E19<>"","-"&E19,"")&IF($E20<>"","-"&E20,"")&IF($E21<>"","-"&E21,"")&IF($E22<>"","-"&E22&")",")")
Hoặc cách này: (ngắn hơn của bác sealand)
Mã:
=E8&": ("&SUBSTITUTE(TRIM(SUBSTITUTE(E9&"-"&E10&"-"&E11&"-"&E12&"-"&E13&"-"&E14&"-"&E15&"-"&E16&"-"&E17&"-"&E18&"-"&E19&"-"&E20&"-"&E21&"-"&E22&")","-"," "))," ","-")
 
Tuy dai nhưng theo logic của bạn và đơn giản:

=E8&": ("&E9&IF($E10<>"","-"&E10,"")&IF($E11<>"","-"&E11,"")&IF($E12<>"","-"&E12,"")&IF($E13<>"","-"&E13,"")&IF($E14<>"","-"&E14,"")&IF($E15<>"","-"&E15,"")&IF($E16<>"","-"&E16,"")&IF($E17<>"","-"&E17,"")&IF($E18<>"","-"&E18,"")&IF($E19<>"","-"&E19,"")&IF($E20>"","-"&E20,"")&IF($E21<>"","-"&E21,"")&IF($E22<>"","-"&E22&")",")")
Híc, chắc hôm nay Thầy Sealand hết sức rảnh rỗi hoặc đang..........yêu đây
Theo mình, bài trên nhiều khi chỉ là ví dụ thôi Thầy ơi, khuyên bạn í học VBA đi, biết VBA thì bài này làm cái .........rụp
Híc
 
Xin Cảm ơn các Thầy đã cố gắng tìm cách giúp đỡ!
Đúng như Thầy Cò nói: Đây chỉ là minh họa thôi ạ! Còn vùng dữ liệu thật của Em cỡ phải 70~80 dòng.

các Thầy có thể viết hàm tổng quát bằng VBA để em áp dụng cũng được ạ!
Tuy nhiên với bài này em vẫn muốn dùng công thức hơn. Nhưng cách nào hay thì em theo ạ!
Xin cảm ơn GPE!
 
Xin Cảm ơn các Thầy đã cố gắng tìm cách giúp đỡ!
Đúng như Thầy Cò nói: Đây chỉ là minh họa thôi ạ! Còn vùng dữ liệu thật của Em cỡ phải 70~80 dòng.

các Thầy có thể viết hàm tổng quát bằng VBA để em áp dụng cũng được ạ!
Tuy nhiên với bài này em vẫn muốn dùng công thức hơn. Nhưng cách nào hay thì em theo ạ!
Xin cảm ơn GPE!
KUMI ngâm cứu hàm JoinText của thầy Ndu xem tại đây.
 
Xin Cảm ơn các Thầy đã cố gắng tìm cách giúp đỡ!
Đúng như Thầy Cò nói: Đây chỉ là minh họa thôi ạ! Còn vùng dữ liệu thật của Em cỡ phải 70~80 dòng.

các Thầy có thể viết hàm tổng quát bằng VBA để em áp dụng cũng được ạ!
Tuy nhiên với bài này em vẫn muốn dùng công thức hơn. Nhưng cách nào hay thì em theo ạ!
Xin cảm ơn GPE!
Mình viết cho bạn 2 hàm Gom & GomA xử dụng cho dữ liệu trong bài của bạn
Hàm Gom bạn khai báo cell đầu tiên của chuỗi & vùng dữ liệu còn lại ( đề phòng trường hợp cell tiêu đề hổng có nằm chung cột với dữ liệu còn lại)
Hàm GomA thì khai báo chung một cột
leonguyenz
KUMI ngâm cứu hàm JoinText của thầy Ndu xem tại đây.
Bạn í chưa biết gì về VBA mà Leo chỉ bạn í đọc bài của Thầy Ndu chắc bạn í bị tẩu hỏa nhập ma quá
Híc
Thân
 

File đính kèm

Xin chào Thầy Cô và Anh Chị trong GPE!
Em đang gặp phải một vướng mắc về Hàm nối chuỗi... Chi tiết vấn đề em đã viết cụ thể trong file đính kèm.
Thầy Cô và Anh Chị xem file rồi tìm cách giúp em với ạ!
Xin cảm ơn!
Bạn khỏi suy nghĩ giải quyết bằng công thức chi cho mệt (dù có cách thì khả năng tùy biến cũng quá kém)
Bài này giải quyết bằng VBA đúng là dễ hơn ăn khoai (tôi gửi code cả mấy chục lần lên diễn đàn rồi)
Mã:
Function JoinText(ByVal Delimiter As String, ByVal IgnoreBlanks As Boolean, ParamArray Arrays()) As String
  Dim aTmp, Arr(), Item, tmp As String
  Dim i As Long, n As Long
  On Error Resume Next
  For i = LBound(Arrays) To UBound(Arrays)
    aTmp = Arrays(i)
    If Not IsArray(aTmp) Then aTmp = Array(aTmp)
    For Each Item In aTmp
      tmp = IIf(TypeName(Item) = "Error", "", Trim(CStr(Item)))
      If IgnoreBlanks = False Or Len(tmp) Then
        n = n + 1
        ReDim Preserve Arr(1 To n)
        Arr(n) = tmp
      End If
    Next
  Next
  If n Then JoinText = Join(Arr, Delimiter)
End Function
Áp dụng trên bảng tính: =E8&": ("&JoinText("-", TRUE, E9:E22)&")"
Màu đỏ: Dấu phân cách tùy bạn chọn
Màu xanh: =True nghĩa là bỏ qua cell rổng (và ngược lại)
Màu tím: vùng cần nối chuổi (có thể 1 vùng hoặc nhiều vùng không liên tục tùy ý)
Hàm này nó đa năng lắm nha! Thậm chí có thể nối chuổi đồng thời LỌC DUY NHẤT luôn nữa đấy (trùng lấy một). Bạn tin không?

------------------------------------
Bạn í chưa biết gì về VBA mà Leo chỉ bạn í đọc bài của Thầy Ndu chắc bạn í bị tẩu hỏa nhập ma quá

Thân
Chính vì chưa biết VBA mới cần 1 hàm ở mức tổng quát để người ta có thể áp dụng trên mọi kiểu dữ liệu anh à
Nói thêm hàm của anh có dùng Join e rằng không ăn thua. Lý do vì: Làm sao anh chắc rằng dữ liệu của người ta luôn là 1 cột nhiều dòng?
 

File đính kèm

Lần chỉnh sửa cuối:
Chính vì chưa biết VBA mới cần 1 hàm ở mức tổng quát để người ta có thể áp dụng trên mọi kiểu dữ liệu anh à
Nói thêm hàm của anh có dùng Join e rằng không ăn thua. Lý do vì: Làm sao anh chắc rằng dữ liệu của người ta luôn là 1 cột nhiều dòng?

Hàm của thầy tổng quát quá muốn áp dụng vào một số file nhưng chưa được. Đợi vấn đề của Kumi song em xin được chen ngang một File sau
 
Hihihi! HAY QUÁ TRỜI! Hóa ra là hàm tự tạo! ^^
Cảm ơn Thầy NDU và Thầy CÒ nhiều nhé!
Vậy mà con cứ tửng là phải kích hoạt code (kiểu như là kích nút buttom ấy)thì mới xong ai ngờ xem bài mới đến cách dùng hàm tự tạo hihi!
Cảm ơn GPE!
 
Nhờ các thầy và mọi người giúp giải pháp nối chuỗi có điều kiện như sau:
Ghép tên lớp số lượng và số điểm thành một chuỗi text với điều kiện số lượng là 0 hoặc để trống thì bỏ qua
(NHìn vào số liệu báo cáo kết quả số lượng bằng 0 thì bỏ qua không báo)
Ghi chú thang điểm có thể lên đến 100 ... Sợ hàm If dài

Chi tiết em có File đính kèm và có kết quả mong muốn ở dưới
 

File đính kèm

Nhờ các thầy và mọi người giúp giải pháp nối chuỗi có điều kiện như sau:
Ghép tên lớp số lượng và số điểm thành một chuỗi text với điều kiện số lượng là 0 hoặc để trống thì bỏ qua
(NHìn vào số liệu báo cáo kết quả số lượng bằng 0 thì bỏ qua không báo)
Ghi chú thang điểm có thể lên đến 100 ... Sợ hàm If dài

Chi tiết em có File đính kèm và có kết quả mong muốn ở dưới

Nếu bạn đã có hàm tự tạo của tôi trong module rồi thì gõ công thức này vào cell F17 nhé:
Mã:
="Lớp "&F1&": "&JoinText("; ",TRUE,IF(F4:F13="","",F4:F13&" điểm "&$B$4:$B$13))
Bấm Ctrl + Shift + Enter để kết thúc. Kéo fill sang phải
Xong!
 
Nếu bạn đã có hàm tự tạo của tôi trong module rồi thì gõ công thức này vào cell F17 nhé:
Mã:
="Lớp "&F1&": "&JoinText("; ",TRUE,IF(F4:F13="","",F4:F13&" điểm "&$B$4:$B$13))
Bấm Ctrl + Shift + Enter để kết thúc. Kéo fill sang phải
Xong!

Cảm ơn thầy nhiều
Biết hàm JoinText của thầy đã nâu nhưng ứng dụng vào thì hơi kém, nghĩ mãi không ra
Đã thử công thức của thầy, kết quả đúng như mong muốn
 
Chính vì chưa biết VBA mới cần 1 hàm ở mức tổng quát để người ta có thể áp dụng trên mọi kiểu dữ liệu anh à
Nói thêm hàm của anh có dùng Join e rằng không ăn thua. Lý do vì: Làm sao anh chắc rằng dữ liệu của người ta luôn là 1 cột nhiều dòng?

Tôi có ý kiến chủ quan thế này.
Nếu là hàm tổng quát và áp dụng trên mọi kiểu dữ liệu thì nên có hướng dẫn kỹ bởi vì "Chính vì chưa biết VBA", tức người chưa có kinh nghiệm.

Nếu "mọi kiểu dữ liệu" bao hàm cả Array thì nên hướng dẫn kỹ

vd. code

Mã:
s = JoinText("-", True, Arraỵ(3, 5, "hichic", 8, "tenten", [COLOR=#ff0000]co_tu_dau_do[/COLOR], "he"))

nếu co_tu_dau_do là Array thì kết quả trả về không như mong đợi mặc dù cách truyền tham số là hoàn toàn đúng, hoàn toàn hợp lệ, hoàn toàn được phép. Người chưa có kinh nghiệm có thể sẽ không biết là có bao nhiêu cách truyền cùng một dữ liệu cụ thể, và cách nào tốt nhất, cho kết quả đúng.

Còn code

Mã:
s = JoinText("-", True, 3, 5, "hichic", 8, "tenten", [COLOR=#ff0000]co_tu_dau_do[/COLOR], "he")

Trả về kết quả mong đợi. Nhưng cả trong trường hợp này thì Array co_tu_dau_do không thể có phần tử là mảng được.

Nói cách khác code hiện thời cho phép một hay nhiều "phần tử" là mảng nhưng khi đó thì mỗi phần tử của mỗi mảng đó không thể là mảng. Tức Array? Xin mời, xin mời, nhưng chỉ 1 level mà thôi.

Tất nhiên nếu "mọi kiểu dữ liệu" chỉ là Số, Chuỗi, Range thì khỏi cần hướng dẫn
 
=e8&":"&"("&e9&"-"&e11&"-"&e12&"-"&e13&"-"&e14&"-"&e15&"-"&e20&"-"&e22&")"
 

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

Back
Top Bottom