Nhờ anh chị giải giúp em bài toán sau ah! Làm cách nào để tách được mã hàng trong một chuỗi có nhiều nội dung khác nhau: Mô tả: Nội dung của cột cần tách “INF: Xuất chuyển KVT thi công nâng cấp POP058 INPP02031501 ngày 05/03/2015 (Dương Văn Thành-INF)” tách mã ra “INPP02031501” Note: Mã hàng là đoạn ký tự liền nhau dài nhất trong chuỗi - Dùng hàng loạt công thức lằng nhằng thì em cũng đã tách được nhưng gặp khá nhiều lỗi khi tách ah! https://facebook.com/569100319856001_933899670042729
mã không có ký tự cố định anh ah nó chỉ dài nhất trong chuỗi, còn "ngày" lúc các bạn làm có lúc quên hoặc ghi sai chính tả ạh.
trong file em dựa vào chữ "POP" sau đó lọc từ "POP" đến cuối chuỗi và dùng thêm một công thức khác để lọc mã hàng ah
Có những thành phần nào trong chuỗi là cố định, luôn có mặt ở đó?
dạ là "POP" ah
Cắt từ Pop đến hết chuỗi rồi tìm vị trí dấu cách thứ nhất, vị trí dấu cách thứ 2,dùng hàm mid để lấy ra chuỗi cần tìm
hi anh! trong file ở cột E em cắt từ POP*** đến hết , cột D lọc ra mã hàng và cột C là cột hoàn thiện mã hàng ah! để em tìm vị trí đấu cách đầu tiên xem sao
Hi anh! vấn đề là em không biết làm sao để tìm vị trí dấu cách thứ nhất và thứ hai ah
Function tach(rng As Range) As String Data = rng.Value For i = 1 To Len(Data) If Mid(Data, i, 1) <> " " Then j = j + 1 Else: j = 0 End If If j = 12 Then tach = Mid(Data, i - 11, 12) Exit Function End If Next tach = "Khong tim thay" End Function
Dựa vào qui tắc mã hang gồm 12 ký tự để viết function trên
Bạn nên cẩn thận, có dòng của bạn không có POP. Nếu dung POP làm chuẩn bị sai
dạ! những dòng đó ít nên có thể kiểm soát được ah, anh có thể loại thêm ký tự "POP" không anh vì có những dòng đoạn "POP" nhiều hơn 12 ký tự VD: "POP001-POP008"
Đưa đoạn code bắt chiều dài lên trước j=0
Function tach(rng As Range) As String Data = rng.Value For i = 1 To Len(Data) If Mid(Data, i, 1) <> " " Then j = j + 1 Else: If j = 12 Then tach = Mid(Data, i - 11, 12) Exit Function End If j = 0 End If Next tach = "Khong tim thay" End Function
Thôi rồi, có vài mã hàng 13 ký tự @@ Sao không thống nhất nguyên tắc mã gì hết vậy ta @@
em cũng đang kiểm ah! những mã hàng này là do hệ thống tự động của lấy lên ạh. Nguyên tắc lấy 6 ký tự đầu thể hiện ngày tháng năm số cuối là số thứ tự, ký tự text phía trước là loại hàng ah, em cũng đang đau đầu vụ này
Nguyên tắc về mã là phải fix số ký tự. Không hiểu sao viết phần mềm lại có 2 chiều dài mã khác nhau @@
hì! cái này em chịu ạh
Bây giờ nè: cái POP3243-POP43242 dài hơn 12 ký tự là do nối với nhau = dấu "-" phải không? luôn là như vậy phải không?