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

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!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
Dic={"Công ty","C.Ty","Cty"}
tmp=TRIM(MID($A3,LOOKUP(255,FIND(Dic,$A3))+LEN(LOOKUP(2,1/FIND(Dic,$A3),Dic)),255))
tmpArr=EVALUATE("{"""&SUBSTITUTE(tmp," ",""";""")&"""}")
Arr=IF(CODE(tmpArr) = CODE(UPPER(tmpArr)),LEN(tmpArr),"")
=SUBSTITUTE(SUBSTITUTE(IF(ISERROR(tmp),"","C.Ty "&LEFT(tmp,SUM(Arr)+COUNT(Arr)-1)),")",""),"(","")
Vậy anh ndu96081631 cho xin luôn cái code vba đi
Cảm ơn anh nhiều
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
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)


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
.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"
