Tách mã Đơn vị trong một chuỗi trong File đính kèm

Liên hệ QC

pdt1234567

Thành viên mới
Tham gia
27/7/07
Bài viết
6
Được thích
2
Kính gửi: A/c
A/c giúp tách 1 mã đơn vị trong File đính kèm
Cụ thể ở dòng đầu tiên muốn lấy TA5450A, Dòng 2 T9000, Dòng 3 lấy QW0004A
 

File đính kèm

  • tach.xlsx
    9.1 KB · Đọc: 21
Tác giả bài đăng nên tạo mã theo 1 qui luật nhất định;
Như hiện tại, mã đó độ dài chưa như nhau; Ta nên tạo ra mã có đang AA****#
Có nghĩa là mã luôn có 2 kí tự ở đầu & sau đó là 4 hay 5 kí số ; Khi đó tổng độ dài luôn 7. Theo qui ước như vậy thì dòng mã T9000 là chưa đạt; (& có thể sửa lại thành T@90000 hay T_9000_ theo thống nhất chung.
Khi nhập trong câu, thì trước mã luôn fải là khg trắng; Điều này tại dòng 9 chưa đáp ứng được.
Ngoài ra để nhanh tiên trong việc tìm kiếm, sau mã cũng nên là khoảng trống; Về điều này 1 số dòng chưa thỏa. & như vậy sẽ khó tìm hay tìm sai 1 cách tính cờ có thể.
 
Kính gửi: A/c
A/c giúp tách 1 mã đơn vị trong File đính kèm
Cụ thể ở dòng đầu tiên muốn lấy TA5450A, Dòng 2 T9000, Dòng 3 lấy QW0004A
Cố gắng tham khảo và thực hiện đúng như gợi ý của anh @SA_DQ tại bài #4 trên.
Cũng như tham khảo hướng giải quyết như đề nghị của @ngoctinh87, file đính kèm cụ thể hóa giải pháp này, với giả thiết các mã dài trong vòng 7 ký tự.
Mã:
B1=MID($A1,AGGREGATE(15,6,SEARCH(OFFSET($G$2,,,COUNTA($G$2:$G$101))&COLUMN($A:$J)-1,$A1),1),7)
Enter fill xuống.
Xem file kèm.

Thân
 

File đính kèm

  • tach.xlsx
    9.4 KB · Đọc: 18
Dữ liệu kiểu bát nháo chi khươn: MDV: HW00469, MA DV TA6254A, MA DON VI TA6072A, Ma TA19161, MA SO QW0004A, TA5450A, MA T9000.

Lúc thì MDV, lúc thì MA DV, MA DON VI, Ma, MA, MA SO, lúc thì chả có gì, cộng với lúc thì THANG 7.2018, lúc thì T1, THANG 08.2018, T07.2018, và nếu trong các mã chưa liệt kê còn có mã vd. TH, nếu thế thì ai dám chắc là chắc chắn không có dữ liệu vd.:

CTCP DAU TU KHO VAN SK LOGISTICS NOP TIEN BHXH TH07.2018 MA DON VI TA6072A. GD trong thời điểm đổi ng

???
Thánh cũng không dám đảm bảo là chắc chắn không có dữ liệu bát nháo chi khươn như thế.

Mà nếu có dữ liệu như thế thì mọi code đưa ra đều tèo.
 
Bác Phan Thế Hiệp giúp em ạh. Em đưa vào cái mẫu cụ thể của em mà làm mãi không được
 

File đính kèm

  • mau 01.xlsx
    12.6 KB · Đọc: 9
Bác Phan Thế Hiệp giúp em ạh. Em đưa vào cái mẫu cụ thể của em mà làm mãi không được
Phải tạo các Mã cần tìm nữa chứ, chính nhờ có nó mới phân biệt được mấy thứ lôm côm khác. :p

Tôi đoán các mã này hình như của ngân hàng của bạn tạo ra trong sổ phụ, và bạn mang về để lưu trữ!? Nếu đúng thì tự bạn phải biết xem xét, hoặc hỏi nhân viên ngân hàng các quy tắc tạo mã hiệu này, rồi bạn thiết lập hoặc bổ sung thêm trong côt K (tôi đã làm mẫu).

Cứ yên tâm, theo tôi thì vấn đề của bạn gặp phải, rồi cũng sẽ có cách giải quyết, một khi bạn đã tin vào GPE.

Chúc bạn ngày vui.
/-*+//-*+//-*+/
 

File đính kèm

  • mau 01.xlsx
    13 KB · Đọc: 10
Bác Phan Thế Hiệp giúp em ạh. Em đưa vào cái mẫu cụ thể của em mà làm mãi không được
Tôi suy đoán quy luật từ dữ liệu mẫu nhé, code áp dụng quy luật sau:
  • Mã sẽ có dạng [1 hoặc 2 chữ cái][4 chữ số][0 hoặc 1 chữ cái hoặc chữ số].
  • Nếu tìm thấy chuỗi có dạng mã mà trước nó là 1 trong các chuỗi: MA, MA SO, MDV, MA DV, MA DON VI thì kết quả trả về chuỗi đó.
  • Nếu tìm thấy chuỗi có dạng mã thì kết quả trả về tất cả các chuỗi tìm được, các chuỗi có dạng mã sẽ được phân cách bằng ký tự "/".
  • Nếu không tìm thấy chuỗi có dạng mã thì kết quả trả về chuỗi rỗng.
Mã:
Function LayMa(ByVal NoiDung As String) As String
Dim oMatches As Object, oMatch As Object
With CreateObject("VBScript.RegExp")
    .Global = True
    .IgnoreCase = True
    .Pattern = "((MA)|(MA SO)|(MDV)|(MA DV)|(MA DON VI))[^A-Z]+([A-Z]{1,2}\d{4}[A-Z0-9]{0,1})[^A-Z0-9]*"
    If .Test(NoiDung) Then
        LayMa = .Execute(NoiDung)(0).SubMatches(6)
    Else
        .IgnoreCase = False
        .Pattern = "[^A-Z]*([A-Z]{1,2}\d{4}[A-Z0-9]{0,1})[^A-Z0-9]*"
        If .Test(NoiDung) Then
            Set oMatches = .Execute(NoiDung)
            For Each oMatch In oMatches
                LayMa = LayMa & "/" & oMatch.SubMatches(0)
            Next
            LayMa = Mid(LayMa, 2)
        End If
    End If
End With
End Function
 

File đính kèm

  • Mau 01.xlsm
    20.1 KB · Đọc: 10
Bác Phan Thế Hiệp giúp em ạh. Em đưa vào cái mẫu cụ thể của em mà làm mãi không được
Quy luật của mã:
- Ít nhất 5 ký tự
- Ký tự đầu là chuổi
- Ký tự thứ 3,4,5 là số
- Ký tự trước và sau mã là ".", "-", ":" hoặc là khoảng trắng
Mã:
Function MaDV(ByVal NoiDung As String) As String
  Dim S As Variant, tmp As String, i As Long
  S = Split(Application.Trim(Replace(Replace(Replace(NoiDung, ":", " "), "-", " "), ".", " ")))
  For i = 0 To UBound(S)
    tmp = S(i)
    If Len(tmp) > 4 And Asc(tmp) > 64 And Asc(tmp) < 91 Then
      If IsNumeric(Mid(tmp, 3, 3)) Then
        MaDV = tmp
        Exit Function
      End If
    End If
  Next i
End Function
Công thức
Mã:
C5 =MaDV(G5)
D5 =IFERROR(LEFT(E5,FIND("A/C",E5)-3),E5)
 

File đính kèm

  • mau 01.xlsb
    19.7 KB · Đọc: 7
Web KT
Back
Top Bottom