Xóa từ trong chuỗi theo điều kiện

Liên hệ QC

hongphuong1997

Thành viên tiêu biểu
Tham gia
12/11/17
Bài viết
713
Được thích
286
Giới tính
Nữ
Nhờ các anh chị và các thầy giúp bài như file đính kèm ạ
 

File đính kèm

  • Xóa từ trong chuỗi theo điều kiện.xlsb
    7.6 KB · Đọc: 44
Hi hi..... hum nay bị cách ly rùi
Anh rảnh viết giúp em với anh snow25
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 !
 
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 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 !
Xóa từ có chữ "ô" hoặc chữ "u" anh oi
Bài đã được tự động gộp:

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 !
Anh đọc kỹ lại trong bài em nói rõ rùi mà
(Nhờ các bạn trên diễn đàn xóa giúp từ nào có chữ "Ô" hoặc "u")
 
Nhờ các anh chị và các thầy giúp bài như file đính kèm ạ
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)),""))
 

File đính kèm

  • GPE.xlsm
    18.9 KB · Đọc: 14
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)),""))
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?
 
Trước sau gì cũng phải xài UDF. Thôi viết đại cái hàm mới cho rồi.
 
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?
Dùng code củ chuối này thử.
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
Hàm dùng như sau:
Mã:
=GPE_Filter(C6)
 
Dùng code củ chuối này thử.
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
Hàm dùng như sau:
Mã:
=GPE_Filter(C6)
Em cảm ơn anh nhiều ạ
Chúc anh ngủ ngon và có nhiều giấc mơ anh nhé
Bài đã được tự động gộp:

Tôi có code, nhưng đợi thớt sửa ví dụ của mình cho hợp lệ đã.
Cháu cảm ơn bác đêm khuya mà bác vẫn quan tâm đến chúng cháu ạ
Cháu gửi lại file bác xem giúp cháu bác nhé.
 

File đính kèm

  • Xóa từ trong chuỗi theo điều kiện.xlsb
    15.1 KB · Đọc: 11
Không biết tác giả bài đăng muốn ra kết quả làm sao với mệnh đề: "Ông Không Có 'Ù' à?"
 
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

1585618317822.png
 
Lần chỉnh sửa cuối:
Nhờ các anh chị và các thầy giúp bài như file đính kèm ạ
Nếu có hàm Textjoin có thể dùng công thức này:
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),""))
Ctrl+Shift+Enter
 
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"
 
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"
...
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á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ờ"
 
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ờ"
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"
 
Web KT
Back
Top Bottom