Tách chuỗi không giống nhau

Liên hệ QC

buiduytandat79

Thành viên mới
Tham gia
10/10/17
Bài viết
37
Được thích
4
Giới tính
Nam
Kính chào các anh chị
Mình có 1 bài toán: danh mục mã không đồng nhất, giờ mình muốn tách các ký tự như bảng dưới. Rất mong mọi người giúp đỡ. Mình xin cảm ơn nhiều
Danh mụcCần lấy ký tự
KHN2XBH201100285KHN
2202011053722020
ĐH_209992020ĐH
20/11-0183/ĐHLEĐHLE
699/11201120
BH28649BH
 

File đính kèm

  • tách chuỗi.xlsx
    869.4 KB · Đọc: 19
Kính chào các anh chị
Mình có 1 bài toán: danh mục mã không đồng nhất, giờ mình muốn tách các ký tự như bảng dưới. Rất mong mọi người giúp đỡ. Mình xin cảm ơn nhiều
Danh mụcCần lấy ký tự
KHN2XBH201100285KHN
2202011053722020
ĐH_209992020ĐH
20/11-0183/ĐHLEĐHLE
699/11201120
BH28649BH
Thì thích phần nào, copy phần đó dán sang cột bên cạnh thôi
 
Dạ, em cũng biết cần có 1 ..quy tắc của chuỗi thì sẽ làm đc, nhưng đây là bảng mã danh mục của các khách hàng khác nhau, nên ko có quy luật ạ.
Thế bạn dựa vào đâu để lấy ra cái ký tự cần lấy, không có quy tắc thì phải có một bảng mã danh mục khách hàng trước thì bạn mới biết là lấy gì chứ
 
nhưng đây là bảng mã danh mục của các khách hàng khác nhau, nên ko có quy luật ạ
Vấn đề không phải quy luật của bảng đặt mã, mà là quy luật tách mã như thế nào. Bạn lấy ra được mấy ký tự đó chứng tỏ nó phải có gì đó thuộc về "quy luật" hoặc "dấu hiệu nhận biết" hoặc là "bảng tra"
 
Dạ, em cũng biết cần có 1 ..quy tắc của chuỗi thì sẽ làm đc, nhưng đây là bảng mã danh mục của các khách hàng khác nhau, nên ko có quy luật ạ.
Mình nêu suy nghĩ trong đầu của mình khi tách số ký tự sang cột bên như nào ra đây. Nêu thật chậm, thật chi tiết vào. Từ đó sẽ tính tiếp.
 
Kính chào các anh chị
Mình có 1 bài toán: danh mục mã không đồng nhất, giờ mình muốn tách các ký tự như bảng dưới. Rất mong mọi người giúp đỡ. Mình xin cảm ơn nhiều
Danh mụcCần lấy ký tự
KHN2XBH201100285KHN
2202011053722020
ĐH_209992020ĐH
20/11-0183/ĐHLEĐHLE
699/11201120
BH28649BH
Thử code sau


Sub Tachchuoi()
Range("C2:c7") = "=IF(ISNUMBER(RC[-2]+0),LEFT(RC[-22],5),IF(ISNUMBER(SEARCH(""/"",RC[-2])),TRIM(RIGHT(SUBSTITUTE(RC[-2],""/"",REPT("" "",100)),100))," & Chr(10) & "IF(ISNUMBER(SEARCH(""_"",RC[-1])),TRIM(LEFT(SUBSTITUTE(RC[-2],""_"",REPT("" "",100)),100))," & Chr(10) & "LEFT(RC[-3],AGGREGATE(15,6,SEARCH({0,1,2,3,4,5,6,7,8,9},RC[-2]),1)-1))))"
Range("C2:c7").Value = Range("C2:c7").Value

End Sub
 
Lần chỉnh sửa cuối:
Nếu chỉ trong các trường hợp này thì quy luật như sau:
1- Tìm "/" cuối cùng và lấy các ký tự phía sau
2- Tìm "_" và lấy các ký tự phía trước
3- Nếu toàn bộ là dãy số thì lấy 5 ký tự phía trước
4- Cuối cùng, lấy các ký tự trước ký số đầu tiên tìm thấy

Dòng 2:
Mã:
=IF(ISNUMBER(A2+0),LEFT(A2,5),IF(ISNUMBER(SEARCH("/",A2)),TRIM(RIGHT(SUBSTITUTE(A2,"/",REPT(" ",100)),100)),
IF(ISNUMBER(SEARCH("_",A2)),TRIM(LEFT(SUBSTITUTE(A2,"_",REPT(" ",100)),100)),
LEFT(A2,AGGREGATE(15,6,SEARCH({0,1,2,3,4,5,6,7,8,9},A2),1)-1))))

Lưu ý quan trọng: Bỏ file đính kèm đi, post file khác chỉ để 1 sheet thôi. Toàn dữ liệu quan trọng mà post lên thế này thì tiêu có ngày.

1607487501789.png
 

File đính kèm

  • Capture.JPG
    Capture.JPG
    33.8 KB · Đọc: 4
Bài nào là bài "chính chủ" vậy anh?
...
Bài #9 chôm code của bài #8 :D

@Thớt: bài này chưa xác định điều kiện nào vượt điều kiện nào (thứ tự ưu tiên) nếu chuỗi thoả nhiều điều kiện.
Điển hình nếu chuỗi vừa bắt đầu bằng Alpha, vừa có dấu '/' thì bên nào được ưu tiên.
 
Bài số 8 sửa sau khi bài 9 post lên 8 phút. Trước đó toàn là Left.
Tôi không nói khi sửa có phải là sao chép hay không nhưng bài 9 vẫn chắc chắn chính chủ. Đề nghị mọi người không bàn việc code hay công thức của ai nữa.

1607517716559.png
 
Ừ nhỉ, thảo nào mình nhớ mang máng có thấy code hàm LEFT và RIGHT, mà mỗi ô 1 công thức riêng, thấy hài hài và nghĩ rằng chắc người ta "trêu" chủ thớt chăng.
 
Web KT
Back
Top Bottom