Dò tìm nhiều mã trong một chuỗi

Liên hệ QC

chickenexcel

Thành viên hoạt động
Tham gia
24/8/12
Bài viết
152
Được thích
28
Giới tính
Nam
Hiện tôi có 1 bảng tính cần dò tìm để phân loại sản phẩn dựa theo mã, tuy nhiên mã không đồng nhất về độ dài ký tự, và tôi cũng chưa biết làm thế nào để dò tìm nhiều mã trên 1 chuỗi kỹ tự (liệu hàm SEARCH có thể tìm mảng trong chuỗi được không?)
Nhờ anh/chị hướng dẫn và giúp đỡ!
Xin cảm ơn!
 

File đính kèm

Hiện tôi có 1 bảng tính cần dò tìm để phân loại sản phẩn dựa theo mã, tuy nhiên mã không đồng nhất về độ dài ký tự, và tôi cũng chưa biết làm thế nào để dò tìm nhiều mã trên 1 chuỗi kỹ tự (liệu hàm SEARCH có thể tìm mảng trong chuỗi được không?)
Nhờ anh/chị hướng dẫn và giúp đỡ!
Xin cảm ơn!
Công thức mảng, kết thúc bằng ctrl+shift+enter, copy xuống dưới.
Mã:
B2=IF(SUM(IFERROR(FIND($D$2:$D$8,$A2),0)),$D$1,IF(SUM(IFERROR(FIND($E$2:$E$8,$A2),0)),$E$1,""))
 
Hiện tôi có 1 bảng tính cần dò tìm để phân loại sản phẩn dựa theo mã, tuy nhiên mã không đồng nhất về độ dài ký tự, và tôi cũng chưa biết làm thế nào để dò tìm nhiều mã trên 1 chuỗi kỹ tự (liệu hàm SEARCH có thể tìm mảng trong chuỗi được không?)
Nhờ anh/chị hướng dẫn và giúp đỡ!
Xin cảm ơn!
Giải pháp tìm cột phù hợp thỏa điều kiện mã gần giống nhiều nhất: ví dụ mã DC1 và DC11 thay đổi vị trí cột, thì kết quả sẽ chọn mã thay thế nhiều ký tự nhất. Thử:
Mã:
B2=INDEX($E$1:$F$1,,RIGHT(AGGREGATE(14,6,1/(1/(LEN("|"&A2)-LEN(SUBSTITUTE("|"&A2,"|"&$E$2:$F$8,""))))/($E$2:$F$8<>"")*10+{1,2},1)))
Hoặc
B2="Mã "&RIGHT(AGGREGATE(14,6,1/(1/(LEN("|"&A2)-LEN(SUBSTITUTE("|"&A2,"|"&$E$2:$F$8,""))))/($E$2:$F$8<>"")*10+{1,2},1))
Kết thúc bằng Enter.

Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Tiêu đề nên chăng sửa lại là:
"Dò tìm (thể) loại mã trong chuỗi (chứa mã)"

'Nhân tiện: Tham khảo thêm cách xài VBA: '
Mã:
Sub LoaiMaCanTim()
Dim Rng As Range, sRng As Range, Cls As Range, Rg0 As Range

Set Rg0 = [D2].CurrentRegion.Offset(1)
Set Rng = [A1].Resize([A1].CurrentRegion.Rows.Count)
For Each Cls In Rg0
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlPart)
    If Not sRng Is Nothing Then
        sRng.Offset(, 1).Value = Cells(1, Cls.Column).Value
    End If
Next Cls
End Sub
 
Lần chỉnh sửa cuối:
Giải pháp tìm cột phù hợp thỏa điều kiện mã gần giống nhiều nhất: ví dụ mã DC1 và DC11 thay đổi vị trí cột, thì kết quả sẽ chọn mã thay thế nhiều ký tự nhất. Thử:
Mã:
B2=INDEX($E$1:$F$1,,RIGHT(AGGREGATE(14,6,1/(1/(LEN("|"&A2)-LEN(SUBSTITUTE("|"&A2,"|"&$E$2:$F$8,""))))/($E$2:$F$8<>"")*10+{1,2},1)))
Hoặc
B2="Mã "&RIGHT(AGGREGATE(14,6,1/(1/(LEN("|"&A2)-LEN(SUBSTITUTE("|"&A2,"|"&$E$2:$F$8,""))))/($E$2:$F$8<>"")*10+{1,2},1))
Kết thúc bằng Enter.

Thân
Anh ơi ! Bài này dùng hàm MMULT được không Anh? Hôm qua em áp dụng vào mà không được.
 
Trình độ kém quá nên giúp bác theo kiểu làm công thức "cùn nhất", nhưng không biết có đúng không nữa.
Đây đúng là công thức lúc đầu mình đã nghĩ tới, tuy nhiên nó hơi bất tiện vì nếu có thêm mã mới (với độ dài mới) phải thay đổi lại công thức, hơi bất tiện.Cảm ơn đã giúp đỡ!
Công thức mảng, kết thúc bằng ctrl+shift+enter, copy xuống dưới.
Mã:
B2=IF(SUM(IFERROR(FIND($D$2:$D$8,$A2),0)),$D$1,IF(SUM(IFERROR(FIND($E$2:$E$8,$A2),0)),$E$1,""))
Công thức của bác bị lỗi phân biệt mã DC1 và DC11 ạ :D
Giải pháp tìm cột phù hợp thỏa điều kiện mã gần giống nhiều nhất: ví dụ mã DC1 và DC11 thay đổi vị trí cột, thì kết quả sẽ chọn mã thay thế nhiều ký tự nhất. Thử:
Mã:
B2=INDEX($E$1:$F$1,,RIGHT(AGGREGATE(14,6,1/(1/(LEN("|"&A2)-LEN(SUBSTITUTE("|"&A2,"|"&$E$2:$F$8,""))))/($E$2:$F$8<>"")*10+{1,2},1)))
Hoặc
B2="Mã "&RIGHT(AGGREGATE(14,6,1/(1/(LEN("|"&A2)-LEN(SUBSTITUTE("|"&A2,"|"&$E$2:$F$8,""))))/($E$2:$F$8<>"")*10+{1,2},1))
Kết thúc bằng Enter.

Thân
Công thức của bác rất hay và lựa chọn được mã dù 2 mã gần giống nhau, hàm của bác cho ra kết quả đúng nhất ạ :D
Hàm SEARCH() dùng được bạn.
Cám ơn bác, mặc dù phải sắp xếp dữ liệu theo trình tự (và dò lấy kết quả cuối cùng) nhưng em cũng học được cách dò mảng của hàm SEARCH()
Tiêu đề nên chăng sửa lại là:
"Dò tìm (thể) loại mã trong chuỗi (chứa mã)"

'Nhân tiện: Tham khảo thêm cách xài VBA: '
Mã:
Sub LoaiMaCanTim()
Dim Rng As Range, sRng As Range, Cls As Range, Rg0 As Range

Set Rg0 = [D2].CurrentRegion.Offset(1)
Set Rng = [A1].Resize([A1].CurrentRegion.Rows.Count)
For Each Cls In Rg0
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlPart)
    If Not sRng Is Nothing Then
        sRng.Offset(, 1).Value = Cells(1, Cls.Column).Value
    End If
Next Cls
End Sub
Code của bác cũng bị gặp vấn đề như các bài trên (bị lỗi khi phân biệt giữa mã DC1 và DC 11), nhưng nó giúp sử lý dữ liệu nhanh hơn công thức ạ
Thực ra em lấy test ví dụ và dùng RANDBETWEEN để cắt random mã. ko ngờ nó tạo ra mã củ chuối thế, nhưng qua đó lại có cái hay.Vì biết đâu trong mã của mình lại có những điều "củ chuối" như vậy :p
Cảm ơn các bác rất nhiều, em lại học được thêm nhiều điều mới :p
 
Anh ơi ! Bài này dùng hàm MMULT được không Anh? Hôm qua em áp dụng vào mà không được.
MMULT() không phù hợp với bài này em.

Chủ yếu cách giải phải xử lý trên số ký tự giống nhiều nhất dù nó ở cột bất kỳ.

Chúc em ngày vui.

Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn bác Hiệp, file giải thích quá chi tiết, mà chắc e phải đọc đi đọc lại nhiều lần may ra mới hiểu được logic của bác o_O
 
Web KT

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

Back
Top Bottom