Nối các ký tự theo điều kiện

Liên hệ QC

nvn86hk

Thành viên mới
Tham gia
28/6/12
Bài viết
4
Được thích
0
Tết nhất đến rồi gặp phải bảng tính này mà phải làm thủ công choáng hết cả đầu anh em ạh.
Xin nhờ các anh em cao thủ giúp sức 1 tay. Yêu cầu là Nối các ký tự theo điều kiện. Chi tiết anh em xem giúp trong file exel
Untitled.jpg
 

File đính kèm

  • BANG TINH 161230-01.xlsx
    197.8 KB · Đọc: 37
Tết nhất đến rồi gặp phải bảng tính này mà phải làm thủ công choáng hết cả đầu anh em ạh.
Xin nhờ các anh em cao thủ giúp sức 1 tay. Yêu cầu là Nối các ký tự theo điều kiện. Chi tiết anh em xem giúp trong file exel

Bạn xem file đính kèm....
 

File đính kèm

  • BANG TINH_2.xlsb
    79.6 KB · Đọc: 65
Anh begaint ơi, mấy hôm trước em cũng có thắc mắc tương tự và đã được giải đáp ở đây. Hôm nay em thấy anh làm gọn hơn nhiều, nhưng em không hiểu tại sao lại có hàm noiN, anh có thể giải thích để em học hỏi được không ạ? Em cảm ơn anh nhiều.
 
Anh begaint ơi, mấy hôm trước em cũng có thắc mắc tương tự và đã được giải đáp ở đây. Hôm nay em thấy anh làm gọn hơn nhiều, nhưng em không hiểu tại sao lại có hàm noiN, anh có thể giải thích để em học hỏi được không ạ? Em cảm ơn anh nhiều.

Cái đó là hàm tự tạo. Bạn mở file rồi nhấn Alt+F11 để xem code.
 
Bạn có thể tham khảo video sau, nó cho phép nối ghép text theo điều kiện một cách dễ dàng.
[video=youtube;crzyrMbZzBI]https://www.youtube.com/watch?v=crzyrMbZzBI[/video]
 
Cảm ơn anh befaint xin nhờ anh giúp xử lý bảng tính trong sheet "SP X" như yêu cầu file đính kèm. View attachment 170551

Tặng bạn bộ hàm nối chuỗi theo điều kiện gồm JoinTextJoinIf (cộng 2 hàm hỗ trợ ConvertTo1DArrayUniqueList).
Với yêu cầu trong file thì tôi thấy dùng JoinIf rất thích hợp:
Công thức tại C5 sheet SP X là:
Mã:
=JoinIf(";",IF(( 'Du lieu nguon'!$A$6:$A$12=$C$2)*('Du lieu nguon'!$B$5:$D$5=$B5),'Du lieu nguon'!$B$6:$D$12,NA()),"*")
Bấm Ctrl + Shift + Enter để kết thúc
Đó là tôi nói dùng JoinIf thích hợp, tuy nhiên nếu dùng hàm JoinText cũng giải quyết được luôn, dù công thúc dài hơn một chút:
Mã:
=JoinText(";",UniqueList(IF(( 'Du lieu nguon'!$A$6:$A$12=$C$2)*('Du lieu nguon'!$B$5:$D$5=$B5),'Du lieu nguon'!$B$6:$D$12,NA())))
Cũng Ctrl + Shift + Enter để kết thúc
---------------------------------
Đây là bộ hàm mà tôi tâm đắc nhất trong quá trình nghiên cứu viết code VBA, bởi nó đáp ứng hầu như mọi nhu cầu liên quan đến nối chuỗi có điều kiện
(bạn có thể mường tượng JoinIf giống với SUMIFS và JoinText giống với SUMPRODUCT về cách dùng)
 

File đính kèm

  • JoinFunc_Final.xlsb
    86.9 KB · Đọc: 71
Lần chỉnh sửa cuối:
Tặng bạn bộ hàm nối chuỗi theo điều kiện gồm JoinTextJoinIf (cộng 2 hàm hỗ trợ ConvertTo1DArrayUniqueList).
Với yêu cầu trong file thì tôi thấy dùng JoinIf rất thích hợp:
Công thức tại C5 sheet SP X là:
Mã:
=JoinIf(";",IF(( 'Du lieu nguon'!$A$6:$A$12=$C$2)*('Du lieu nguon'!$B$5:$D$5=$B5),'Du lieu nguon'!$B$6:$D$12,NA()),"*")
Bấm Ctrl + Shift + Enter để kết thúc
Đó là tôi nói dùng JoinIf thích hợp, tuy nhiên nếu dùng hàm JoinText cũng giải quyết được luôn, dù công thúc dài hơn một chút:
Mã:
=JoinText(";",UniqueList(IF(( 'Du lieu nguon'!$A$6:$A$12=$C$2)*('Du lieu nguon'!$B$5:$D$5=$B5),'Du lieu nguon'!$B$6:$D$12,NA())))
Cũng Ctrl + Shift + Enter để kết thúc
---------------------------------
Đây là bộ hàm mà tôi tâm đắc nhất trong quá trình nghiên cứu viết code VBA, bởi nó đáp ứng hầu như mọi nhu cầu liên quan đến nối chuỗi có điều kiện
(bạn có thể mường tượng JoinIf giống với SUMIFS và JoinText giống với SUMPRODUCT về cách dùng)
bộ hàm rất hay, có tính ứng dụng cao, bổ xung cho các hàm Excel còn thiếu, rất bổ ích cho người dùng
mình nghĩ JoinIf tương tự với SumIf, còn phải Ctrl+Shift+Enter, nếu bạn thiết kế lại, chừa sẵn chừng 3 đến 5 vùng điều kiện giống như SumIfS, kết thúc công thức chỉ Enter bình thường thì càng tuyệt vời hơn nữa, người bình thường cũng sử dụng dể dàng, cộng đồng GPE nối chuổi sẽ hưởng lợi lớn nhờ công của bạn. Cám ơn bạn
 
bộ hàm rất hay, có tính ứng dụng cao, bổ xung cho các hàm Excel còn thiếu, rất bổ ích cho người dùng
mình nghĩ JoinIf tương tự với SumIf, còn phải Ctrl+Shift+Enter, nếu bạn thiết kế lại, chừa sẵn chừng 3 đến 5 vùng điều kiện giống như SumIfS, kết thúc công thức chỉ Enter bình thường thì càng tuyệt vời hơn nữa, người bình thường cũng sử dụng dể dàng, cộng đồng GPE nối chuổi sẽ hưởng lợi lớn nhờ công của bạn. Cám ơn bạn

Cảm ơn bạn quan tâm!
Khi viết bộ hàm này mình có chủ ý dùng đối số là mảng, mục đích tạo thêm nhiều lựa chọn: Có thể nhận đối số là range hoặc thậm chí là 1 mảng khác do công thức trả về. Vì thế mà buộc phải Ctrl + Shift + Enter
Các điều kiện thì do mình tùy ý khai triển, nghĩ được tới đâu hàm sẽ làm tới đó. Còn nếu phát triển theo kiểu 5 hay 6 đối số như SUMIFS thì mình không lường nỗi những tình huống nào có thể xảy ra để bẫy lỗi
---------------------
Nói thêm về bộ hàm nối chuỗi này:
- Mình dùng ParamArray nên có thể nối chuỗi từ rất nhiều mảng khác nhau chứ không phải chỉ một mảng như đang "biểu diễn" ở trên... Nói chung là còn khá nhiều tình huống chưa dùng tới
- JoinIf có dùng toán tử LIKE để so sánh nên hoàn toàn có thể lồng điều kiện bằng các ký tự đại diện "*" hoặc "?" vào. Cũng có thể so sánh "=", ">", "<" tùy ý. Đó là cái mà mình cho là khá giống SUMIF
 
Lần chỉnh sửa cuối:
Cảm ơn bạn quan tâm!
Khi viết bộ hàm này mình có chủ ý dùng đối số là mảng, mục đích tạo thêm nhiều lựa chọn: Có thể nhận đối số là range hoặc thậm chí là 1 mảng khác do công thức trả về. Vì thế mà buộc phải Ctrl + Shift + Enter
Các điều kiện thì do mình tùy ý khai triển, nghĩ được tới đâu hàm sẽ làm tới đó. Còn nếu phát triển theo kiểu 5 hay 6 đối số như SUMIFS thì mình không lường nỗi những tình huống nào có thể xảy ra để bẫy lỗi
---------------------
Nói thêm về bộ hàm nối chuỗi này: Mình dùng ParamArray nên có thể nối chuỗi từ rất nhiều mảng khác nhau chứ không phải chỉ một mảng như đang "biểu diễn" ở trên... Nói chung là còn khá nhiều tình huống chưa dùng tới
mình đọc code cũng không hiểu hết các lệnh, nên cũng không hiểu được tác dụng đầy đủ của hàm, mình chỉ suy nghĩ đơn giản, làm sao một người không rành lắm về các kỷ thuật lồng ghép các hàm vẫn có thể sử dụng được hàm JoinIfS theo nhiều điều kiện một cách dể dàng, dĩ nhiên là phải nhập đúng cấu trúc qui định của hàm, bản thân hàm SumIfS nếu nhập sai nó hiện kết quả lổi ngay
 
Cảm ơn chị NguyenNgocThuHien xin nhờ anh giúp xử lý bảng tính trong sheet "SP X" như yêu cầu file đính kèm.View attachment 170552

Yêu cầu có thêm yếu tố lấy các phần tử duy nhất thì một mình hàm ArraytoText mình giới thiệu chưa thể giải quyết được, phải dùng thêm một hàm có chức năng lọc phần tử như hàm UniqueList của ndu96081631


Do hàm đó ndu96081631 viết rồi, nên mình cũng không muốn viết lại.
Tuy vây bạn có thể dùng công thức: (IF('Du lieu nguon'!$A$6:$A$12=$C$2,INDEX('Du lieu nguon'!$B$6:$D$12,,MATCH(B5,'Du lieu nguon'!$B$5:$D$5,0)),NA())) để cải thiện thêm chút tốc độ.
 
bộ hàm rất hay, có tính ứng dụng cao, bổ xung cho các hàm Excel còn thiếu, rất bổ ích cho người dùng
mình nghĩ JoinIf tương tự với SumIf, còn phải Ctrl+Shift+Enter, nếu bạn thiết kế lại, chừa sẵn chừng 3 đến 5 vùng điều kiện giống như SumIfS, kết thúc công thức chỉ Enter bình thường thì càng tuyệt vời hơn nữa, người bình thường cũng sử dụng dể dàng, cộng đồng GPE nối chuổi sẽ hưởng lợi lớn nhờ công của bạn. Cám ơn bạn

Nói chung là hàm sumifs tuy khá mạnh, nhưng thực sự nó cũng bộc lộ nhược điểm là không thể tính toán được nhứng điều kiện phức tạp, việc dùng phối hợp công thức mảng cho phép diễn đạt những điều kiện phức tạp mà không vấn đề gì. Tuy có thể nó hơi chậm.
 
Xin cám ơn anh ndu96081631, em đã áp dụng thành công trong file tính thực tế, kết quả là rất rất tuyệt vời. Xin chân thành cảm ơn anh một lần nữa và chúc anh, cùng gia đình mạnh khỏe, an khang, thịnh vượng.
Cũng xin cám ơn chị NguyenNgocThuHien đã chia sẽ những kinh nghiệm rất bổ ích. Em cũng chúc chị và gia đình mạnh khỏe, an khang, thịnh vượng.
 
Kính gửi anh NDU96081631,

Mình đã dùng thử hàm JoinIFS của anh rồi. Rất hiệu quả.

Nhờ anh có thể cải tiến thêm hàm để có thể thể hiện tỷ lệ giá trị của các chuỗi như kết quả mong muốn là "Giá trị 1 (xx%), giá trị 2 (xx%)..." và có thể chọn định dạng thể hiện bao nhiêu số thập phân tại tỷ lệ %, ký tự phân cách có thể lựa chọn tùy ý (, - ;), lựa chọn sắp xếp lại chuỗi kết quả theo thứ tự abc hoặc không.

Trân trọng cám ơn anh nhiều.

Chúc anh năm mới thành công và hạnh phúc.
 

File đính kèm

  • Noi chuoi.xlsx
    10.5 KB · Đọc: 19
Web KT
Back
Top Bottom