hongphuong1997
Thành viên tiêu biểu

- Tham gia
- 12/11/17
- Bài viết
- 773
- Được thích
- 322
- Giới tính
- Nữ
Tiếng việt rất phức tạp.Nhờ các anh chị và các thầy giúp bài như file đính kèm ạ
Trích yếu một số nội dung trong file Excel bạn đính kèm :Hi hi..... hum nay bị cách ly rùi
Anh rảnh viết giúp em với anh snow25
Xóa từ có chữ "ô" hoặc chữ "u" anh oiTrích yếu một số nội dung trong file Excel bạn đính kèm :
yêu cầu : chuỗi "Việt Nam không có ổ dịch virut" nhờ các bạn trên diễn đàn xóa chữ "ô" và chữ "u" và móng muốn kết quả "Việt Nam có dịch" sau khi xem xét tôi có mấy ý kiến sau:
1. Kết quả với yêu cầu không phù hợp,
2. Nội dung liên quan đến vấn đề thời cuộc và chính trị, phải có động cơ mục địch tích cực mới giúp được !
Anh đọc kỹ lại trong bài em nói rõ rùi màTrích yếu một số nội dung trong file Excel bạn đính kèm :
yêu cầu : chuỗi "Việt Nam không có ổ dịch virut" nhờ các bạn trên diễn đàn xóa chữ "ô" và chữ "u" và móng muốn kết quả "Việt Nam có dịch" sau khi xem xét tôi có mấy ý kiến sau:
1. Kết quả với yêu cầu không phù hợp,
2. Nội dung nhạy cảm liên quan đến vấn đề thời cuộc và chính trị, phải có động cơ mục địch tích cực mới giúp được !
(Nhờ các bạn trên diễn đàn xóa giúp từ nào có chữ "Ô" hoặc "u") |
Thử công thức với Code của Thầy @ndu96081631Nhờ các anh chị và các thầy giúp bài như file đính kèm ạ
=JoinText(" ",IFERROR(TRIM(MID(SUBSTITUTE(" "&C6," ",REPT(" ",999)),AGGREGATE(15,6,ROW($1:$50)/(1-MMULT(N(ISNUMBER(SEARCH({"ô","ố","ồ","ổ","ỗ","ộ","u","ú","ù","ủ","ũ","ụ"},TRIM(MID(SUBSTITUTE(" "&C6," ",REPT(" ",999)),ROW($1:$50)*999,999))))),ROW($1:$12)^0)),ROW($1:$50))*999,999)),""))
ui, ui!Thử công thức với Code của Thầy @ndu96081631
Công thức hơi dài
Mã:=JoinText(" ",IFERROR(TRIM(MID(SUBSTITUTE(" "&C6," ",REPT(" ",999)),AGGREGATE(15,6,ROW($1:$50)/(1-MMULT(N(ISNUMBER(SEARCH({"ô","ố","ồ","ổ","ỗ","ộ","u","ú","ù","ủ","ũ","ụ"},TRIM(MID(SUBSTITUTE(" "&C6," ",REPT(" ",999)),ROW($1:$50)*999,999))))),ROW($1:$12)^0)),ROW($1:$50))*999,999)),""))
Dùng code củ chuối này thử.ui, ui!
Em cảm ơn anh ạ!
Công thức quá vĩ đại
Anh oi, có cách nào để công thức ngắn gọn không hở anh?
Public Function GPE_Filter(sValue As String) As String
Dim Arr, i%, s$
Arr = Split(sValue, " ")
s = ""
For i = 0 To UBound(Arr)
If (Check_Value(CStr(Arr(i)))) Then
If s = "" Then
s = Arr(i)
Else
s = s & " " & Arr(i)
End If
End If
Next i
GPE_Filter = s
End Function
Public Function Check_Value(s As String) As Boolean
Dim Arr, i%
Arr = Array("ô", ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), "u", "ú", "ù", ChrW(7911), ChrW(361), ChrW(7909))
For i = LBound(Arr) To UBound(Arr)
If (InStr(1, s, Arr(i)) > 0) Or (InStr(1, s, UCase(Arr(i))) > 0) Then
Check_Value = False
Exit Function
End If
Next
Check_Value = True
End Function
=GPE_Filter(C6)
Biểu diễn một cái cho anh em học hỏi với.Dùng Regex, chỉ cần tìm từ có chứa ký tự, replace nó, trim là xong.
Tôi có code, nhưng đợi thớt sửa ví dụ của mình cho hợp lệ đã.Biểu diễn một cái cho anh em học hỏi với.
Em cảm ơn anh nhiều ạDùng code củ chuối này thử.
Hàm dùng như sau:Mã:Public Function GPE_Filter(sValue As String) As String Dim Arr, i%, s$ Arr = Split(sValue, " ") s = "" For i = 0 To UBound(Arr) If (Check_Value(CStr(Arr(i)))) Then If s = "" Then s = Arr(i) Else s = s & " " & Arr(i) End If End If Next i GPE_Filter = s End Function Public Function Check_Value(s As String) As Boolean Dim Arr, i% Arr = Array("ô", ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), "u", "ú", "ù", ChrW(7911), ChrW(361), ChrW(7909)) For i = LBound(Arr) To UBound(Arr) If (InStr(1, s, Arr(i)) > 0) Or (InStr(1, s, UCase(Arr(i))) > 0) Then Check_Value = False Exit Function End If Next Check_Value = True End Function
Mã:=GPE_Filter(C6)
Cháu cảm ơn bác đêm khuya mà bác vẫn quan tâm đến chúng cháu ạTôi có code, nhưng đợi thớt sửa ví dụ của mình cho hợp lệ đã.
Nếu có hàm Textjoin có thể dùng công thức này:Nhờ các anh chị và các thầy giúp bài như file đính kèm ạ
=TEXTJOIN("",TRUE,IF(ISERROR(MATCH(FIND(" ",C6&" ",ROW(1:1000)),IF(MATCH(MID(C6,ROW(1:1000),1),{"ô","ố","ồ","ổ","ỗ","ộ","u","ú","ù","ủ","ũ","ụ"},),FIND(" ",C6&" ",ROW(1:1000))),)),MID(C6,ROW(1:1000),1),""))
Pattern này có vẻ chưa đúng, do macth có khoảng trắng đầu và cuối chuỗi nên replace sẽ bị mất khoảng trắng của từ tiếp theo, nên 2 từ gần nhau sẽ replace được 1 từ, bạn thử với chuỗi "u u u u u"Function XoaTu(ByVal chuoi As String, ByVal kytu As String)
' code xoa nhung tu trong chuoi co chua ky tu kytu
Static rx As Object
Dim i As Integer
If rx Is Nothing Then
Set rx = CreateObject("vbscript.regexp")
rx.ignorecase = True
rx.Global = True
End If
rx.Pattern = Replace(" [^p ]*[p].*? ", "p", kytu)
XoaTu = Application.Trim(rx.Replace(" " & Replace(chuoi, " ", " ") & " ", " "))
' chú ý: phải chỉnh dấu cách ở chuỗi thành 2 dấu cách vì regex sẽ match từ trước và nuốt mất dấu cách từ kế tiếp
End Function
View attachment 234381
Pattern này có vẻ chưa đúng, do macth có khoảng trắng đầu và cuối chuỗi nên replace sẽ bị mất khoảng trắng của từ tiếp theo, nên 2 từ gần nhau sẽ replace được 1 từ, bạn thử với chuỗi "u u u u u"
Cái phần "chú ý" tôi mới thêm để giải thích. Nhưng cái phần replace môt space thành hai spaces đã có từ trước rồi....
XoaTu = Application.Trim(rx.Replace(" " & Replace(chuoi, " ", " ") & " ", " "))
' chú ý: phải chỉnh dấu cách ở chuỗi thành 2 dấu cách vì regex sẽ match từ trước và nuốt mất dấu cách từ kế tiếp
End Function
...
Có thể nó bị lỗi khác , bạn thử =XoaTu("u u u u","ôốồổỗộuúùủũụ") đúng ra nó phải trả về empty, nhưng kết quả là "u u"Cái phần "chú ý" tôi mới thêm để giải thích. Nhưng cái phần replace môt space thành hai spaces đã có từ trước rồi.
Trong kết quả thử ở bài trên. Nếu space bị nuốt thì "cuối phố" phải còn lại "phố"
cụm từ "chẳng hiểu vì sao không đóng bao giờ" phải còn lại "chẳng vì không bao giờ"
Bài thử của tôi cho ra không có "phố", và "chẳng vì giờ"