Xin công thức dò tìm 1 chuỗi con trong chuỗi lớn (1 người xem)

Người dùng đang xem chủ đề này

Backy1990

Thành viên mới
Tham gia
25/6/11
Bài viết
27
Được thích
2
Nghề nghiệp
Kế toán
Chào cả nhà!
Mình có một bảng tính (file đính kèm) trong đó có 1 cột diễn giải ghi nội dung chi tiết vụ việc.
Mình muốn có công thức để tách riêng tên đối tác có trong nội dung đó nhưng chẳng biết làm sao cả!!!
Xin được lĩnh giáo!
Cảm ơn nhiều
 

File đính kèm

Chào cả nhà!
Mình có một bảng tính (file đính kèm) trong đó có 1 cột diễn giải ghi nội dung chi tiết vụ việc.
Mình muốn có công thức để tách riêng tên đối tác có trong nội dung đó nhưng chẳng biết làm sao cả!!!
Xin được lĩnh giáo!
Cảm ơn nhiều
Bài này nếu làm bằng VBA chắc không có vấn đề, còn nếu làm bằng công thức thường thì... hơi tê nha!
Tuy nhiên cứ thử cái xem sao!
Hướng dẫn cách làm:
- Đầu tiên đặt con trỏ chuột tại dòng 3
- Bấm Ctrl + F3 để vào Define Name và đặt 4 name thế này:
Mã:
Dic={"Công ty","C.Ty","Cty"}
Mã:
tmp=TRIM(MID($A3,LOOKUP(255,FIND(Dic,$A3))+LEN(LOOKUP(2,1/FIND(Dic,$A3),Dic)),255))
Mã:
tmpArr=EVALUATE("{"""&SUBSTITUTE(tmp," ",""";""")&"""}")
Mã:
Arr=IF(CODE(tmpArr) = CODE(UPPER(tmpArr)),LEN(tmpArr),"")
- Công thức trên bảng tính tại cell B3:
Mã:
=SUBSTITUTE(SUBSTITUTE(IF(ISERROR(tmp),"","C.Ty "&LEFT(tmp,SUM(Arr)+COUNT(Arr)-1)),")",""),"(","")
-------------------------
Toàn bộ giải thuật:
- Dựa vào việc tìm kiếm từ khóa "Công ty" hoặc "C.ty" hoặc "Cty" để xác định vị trí bắt đầu
- Sau khi xác định vị trí đầu tiên sẽ xét xem các từ sau đó có viết HOA ký tự đầu hay không? Nếu có thì lấy độ dài của từ đó
- Cuối cùng, qua phép tính toán (SUM, COUNT) ta xác định được độ dài chuổi cần lấy rồi gán xuống bảng tính
 

File đính kèm

Vậy anh ndu96081631 cho xin luôn cái code vba đi
Cảm ơn anh nhiều
 
Vậy anh ndu96081631 cho xin luôn cái code vba đi
Cảm ơn anh nhiều

Trong lúc chờ bạn ndu tôi góp vui chút. Sợ trùng với mọi người nên dùng cách "quái đản" chút
Mã:
Function bla(Arr)
    Dim objRegExp As Object
    Dim s As String, pattern As String
    Dim rArr, r As Long
    
    pattern = ChrW(258) & ChrW(258) & ChrW(258) & ChrW(258) & ChrW(258) & ChrW(194) & _
                    ChrW(194) & ChrW(194) & ChrW(194) & ChrW(202) & ChrW(202) & ChrW(202) & _
                    ChrW(202) & ChrW(202) & ChrW(212) & ChrW(212) & ChrW(212) & ChrW(212) & _
                    ChrW(212) & ChrW(416) & ChrW(416) & ChrW(416) & ChrW(416) & ChrW(416) & _
                    ChrW(431) & ChrW(431) & ChrW(431) & ChrW(431) & ChrW(431) & ChrW(272) & _
                    ChrW(258) & ChrW(7856) & ChrW(7858) & ChrW(7860) & ChrW(7854) & ChrW(7862) & _
                    ChrW(194) & ChrW(7846) & ChrW(7848) & ChrW(7850) & ChrW(7844) & ChrW(202) & _
                    ChrW(7872) & ChrW(7874) & ChrW(7876) & ChrW(7870) & ChrW(7878) & ChrW(212) & _
                    ChrW(7890) & ChrW(7892) & ChrW(7894) & ChrW(7888) & ChrW(7896) & ChrW(416) & _
                    ChrW(7900) & ChrW(7902) & ChrW(7904) & ChrW(7898) & ChrW(7906) & ChrW(431) & _
                    ChrW(7914) & ChrW(7916) & ChrW(7918) & ChrW(7912) & ChrW(7920)
    pattern = "(^|\b)(Công ty|C.Ty|Cty)\b( [A-Z" & pattern & "][^ )]+)+"
    
    Set objRegExp = CreateObject("VBScript.RegExp")
    
    With objRegExp
        .Global = False
        If IsArray(Arr) Then
            rArr = Arr
            For r = LBound(rArr) To UBound(rArr)
                .pattern = pattern
                If .test(rArr(r, 1)) Then
                    s = .Execute(rArr(r, 1)).Item(0)
                    .pattern = "(^|\b)(Công ty|C.Ty|Cty)\b"
                    s = .replace(s, "C.Ty")
                    rArr(r, 1) = s
                Else
                    rArr(r, 1) = vbNullString
                End If
            Next r
            bla = rArr
        Else
            .pattern = pattern
            If .test(Arr) Then
                s = .Execute(Arr).Item(0)
                .pattern = "(^|\b)(Công ty|C.Ty|Cty)\b"
                s = .replace(s, "C.Ty")
            End If
            bla = s
        End If
    End With
    Set objRegExp = Nothing
End Function
1. Công thức ô C3: =bla(A3) --> kéo xuống tới C7
2. Chọn D3:D7: công thức là =bla(A3:A7) kết thúc bằng Ctrl + Shift + Enter
----------
Không kiểm tra nên không thấy là các ký tự lặp lại nhiều.
Sửa lại thành:
PHP:
pattern = ChrW(258) & ChrW(194) & ChrW(202) & ChrW(212) & ChrW(416) & ChrW(431) & _
 ChrW(272) & ChrW(7856) & ChrW(7858) & ChrW(7860) & ChrW(7854) & ChrW(7862) & _
 ChrW(7846) & ChrW(7848) & ChrW(7850) & ChrW(7844) & ChrW(7872) & ChrW(7874) & _
 ChrW(7876) & ChrW(7870) & ChrW(7878) & ChrW(7890) & ChrW(7892) & ChrW(7894) & _
 ChrW(7888) & ChrW(7896) & ChrW(7900) & ChrW(7902) & ChrW(7904) & ChrW(7898) & _
 ChrW(7906) & ChrW(7914) & ChrW(7916) & ChrW(7918) & ChrW(7912) & ChrW(7920)
 

File đính kèm

Lần chỉnh sửa cuối:
Rất cảm ơn hai bác ndu và siwtom.
Còn 1 vấn đề nữa xin các bác giúp đỡ :
Em muốn có 1 cái hàm trắc nghiệm kiểu như kiểm tra xem trong 1 chuỗi lớn có chứa 1 chỗi con không, nếu có trả giá trị TRUE ngược lại cho giá trị False.
Xin cảm ơn thật nhiều
 
Xim hỏi thêm bác siwtom 1 chút : Tại sao khi em thêm vào code ở dòng :
pattern = "(^|\b)(Công Ty|Công ty|công ty|C.Ty|C.ty|c.ty|C/Ty|C/ty|c/ty|CTy|Cty|cty)\b( [A-Z" & pattern & "][^ )]+)+" (thêm một số kiểu viết hay dùng của từ "Công ty") thì nó trả về đúng như từ mình viết
VD : "công ty Hà Thành ..." = "công ty Hà Thành" trong khi đó viết kiểu "Công ty Hà Thành..." = "C.Ty Hà Thành"
Cảm ơn bác nhiều
 
Xim hỏi thêm bác siwtom 1 chút : Tại sao khi em thêm vào code ở dòng :
pattern = "(^|\b)(Công Ty|Công ty|công ty|C.Ty|C.ty|c.ty|C/Ty|C/ty|c/ty|CTy|Cty|cty)\b( [A-Z" & pattern & "][^ )]+)+" (thêm một số kiểu viết hay dùng của từ "Công ty") thì nó trả về đúng như từ mình viết
VD : "công ty Hà Thành ..." = "công ty Hà Thành" trong khi đó viết kiểu "Công ty Hà Thành..." = "C.Ty Hà Thành"
Cảm ơn bác nhiều

Bài toán của bạn ̣được giải quyết theo 2 bước:
1. Tìm trong chuỗi đã cho đoạn có chứa Công Ty, Công ty,công ty, C.Ty, C.ty, c.ty, C/Ty, C/ty, c/ty, CTy, Cty, cty + tên nào đó
2. Trong chuỗi tìm được ở bước 1 chuyển Công Ty, Công ty,công ty, C.Ty, C.ty, c.ty, C/Ty, C/ty, c/ty, CTy, Cty, cty thành C.Ty
Cái pattern bạn đã sửa dùng để tìm ở bước 1. Bạn không sửa pattern dùng cho bước Replace tức bước 2. Có 2 chỗ trong code cần sửa: trước dòng s = .replace(s, "C.Ty") phải có
Mã:
.pattern = "(^|\b)(Công Ty|Công ty|công ty|C.Ty|C.ty|c.ty|C/Ty|C/ty|c/ty|CTy|Cty|cty)\b"
Tóm lại pattern dùng cho bước 2 là pattern dùng cho bước 1 sau khi loại bỏ đuôi
"( [A-Z" & pattern & "][^ )]+)+"

Chú ý: bạn không được copy pattern từ GPE vào code vì GPE tự thêm nhiều dấu cách.
 
Lần chỉnh sửa cuối:
Trở lại vấn đề tạo 1 hàm trắc nghiệm kiểu như là ISNA hoặc ISNUMBER ... để xem trong chuỗi mẹ có chứa chuỗi con không, các bác cố gắng giúp em với nhé.
Bởi vì nhiều khi em chỉ cần kiểm tra nhanh số thực chi (hoặc thu) của 1 đối tượng nào đó có ghi trên nội dung trong cột diễn giải.
Cảm ơn các bác thật nhiều.
 

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

Back
Top Bottom