Có cụm từ đó trong word nhưng tìm bằng Replace thì không tìm thấy?

Liên hệ QC

TayMonKhanh

Thành viên mới
Tham gia
9/11/08
Bài viết
34
Được thích
5
Mình có 1 file word, mình muốn tìm cụm từ "kiến trúc thượng mặt cầu" để thay thế. Tuy nhiên khi mình dùng Ctr+H để tìm thì word báo là không tìm thấy. Nhưng rõ ràng là mình nhìn thấy nó trên file word bằng mắt thường.

Bạn nào đã từng gặp trường hợp tương tự thì chỉ điểm cho mình với!

Cảm ơn các bạn!
 

File đính kèm

  • 123.docx
    66 KB · Đọc: 9
Mình có 1 file word, mình muốn tìm cụm từ "kiến trúc thượng mặt cầu" để thay thế. Tuy nhiên khi mình dùng Ctr+H để tìm thì word báo là không tìm thấy. Nhưng rõ ràng là mình nhìn thấy nó trên file word bằng mắt thường.

Bạn nào đã từng gặp trường hợp tương tự thì chỉ điểm cho mình với!

Cảm ơn các bạn!
1. Về tìm tiếng Việt thì do cùng một từ nhưng có thể 1 là unicode dựng sẵn còn cái kia là unicode tổ hợp. Mắt nhìn như nhau nhưng chúng là khác nhau. Vì thế Find chỉ tìm được khi cái bạn gõ trong Find và cái có trong văn bản là hoàn toàn như nhau về tổ hợp hay dựng sẵn chứ không chỉ như nhau do mắt nhìn thấy.

2. Bạn copy từ văn bản đoạn "kiến trúc thượng mặt cầu" và dán vào cửa sổ Find. Find không tìm thấy? Hơi lạ phải không? Vì theo điểm 1 thì dù đoạn kia là tổ hợp hay dựng sẵn thì khi bạn copy và dán vào Find thì cái cần tìm chắc chắn giống hệt cái trong văn bản. Vậy tại sao không tìm thấy?

Cũng vẫn văn bản ấy nếu bạn copy từ văn bản và dán vào Find đoạn "trúc thượng mặt cầu" thì Find lại tìm thấy. Như vậy vấn đề ở đoạn "kiến ".

Bạn nhìn thấy sau "kiến" dấu cách space? Thế thì bạn hãy đặt trỏ văn bản trước "t" của từ "trúc". Bây giờ bạn nhấn phím lùi backspace (trên bàn phím đôi khi là mũi tên sang trái <-) một lần. Bạn sẽ thấy không có động tĩnh gì. Vậy thì sau "kiến" không hẳn chỉ là dấu cách space, vì nếu thế khi nhấn 1 backspace thì sẽ thấy "kiến" dính liền với "trúc". Trong văn bản của bạn phải nhấn phím backspace 3 lần thì "kiến mới dính với "trúc".

Nếu ngay sau khi mở tập tin bạn nhấn ¶ trong thẻ Home -> mục Paragraph thì bạn sẽ thấy hình đính kèm.

find.JPG

Rõ ràng sau "kiến" là 3 ký tự: dấu cách space và 2 ký tự lạ hoắc. Đó chính là 2 ký tự unicode có điểm mã là 8203 (thập phân), hay 200B (hex). Ký tự đó trong bảng mã unicode có tên là ZERO WIDTH SPACE. Đó là ký tự không nhìn thấy. Chính ZERO WIDTH SPACE là nguyên nhân làm khó Find. Nếu bạn tự gõ trong văn bản "kiến trúc thượng mặt cầu" thì chắc chắn Find sẽ tìm thấy vì tự gõ thì không có 2 ký tự unicode 200B

99,99999% là văn bản không tự gõ mà được copy từ trang Web. Trong code HTML đôi khi người ta dùng những ký tự điều khiển và chúng thuộc dạng "không nhìn thấy"
 
Lần chỉnh sửa cuối:
Cảm ơn bạn Batman1 rất nhiều. Rất cảm ơn bạn đã bỏ nhiều công sức để viết một bài dài và giải thích tường tận và chi tiết đến như vậy. Hy vọng câu trả lời của bạn cũng sẽ hữu ích cho những người có cùng gặp vướng mắc như mình. Mình đã mò mẫm, thử nghiệm rất nhiều lần và nhiều cách nhưng vẫn không tìm ra nguyên nhân.
Bạn Batman1 cho mình hỏi thêm: Bây giờ mình muốn xóa các ký tự unicode có điểm mã là 8203, 200B… trong file word trên thì mình phải làm như thế nào, bởi mình copy nó không được?
 
Cảm ơn bạn Batman1 nhiều nhé, mình đã tìm ra cách để xóa các ký tự trên rồi. Mình chỉ xin hỏi thêm bạn một chút là mình làm thủ thuật gì để nhận biết được các mã của unicode như bạn đã tìm ra được ở bên trên vậy? Bởi khi làm như bạn xong thì mình thấy nó hiện ra nhiều ký tự lạ hơn, ví dụ dấu mũi tên.v.v. Cảm ơn bạn rất nhiều!
 
Lần chỉnh sửa cuối:
Cảm ơn bạn Batman1 nhiều nhé, mình đã tìm ra cách để xóa các ký tự trên rồi. Mình chỉ xin hỏi thêm bạn một chút là mình làm thủ thuật gì để nhận biết được các mã của unicode như bạn đã tìm ra được ở bên trên vậy? Cảm ơn bạn rất nhiều!
Tôi thường làm bằng tay như sau.

Do khó bôi đen 3 ký tự giữa "kiến" và "trúc" nên tôi bôi đen "kiến trúc" -> Ctrl + C -> chuyển sang Excel -> chọn A1 -> Ctrl + V -> loại bỏ "kiến" và "trúc" để còn lại những gì giữa chúng -> Alt + F11 -> thêm module với code sau và sau đó chạy code
Mã:
Sub test()
Dim s As String, k As Long, code As Long
    s = Sheet1.Range("A1").Value
    For k = 1 To Len(s)
        code = AscW(Mid(s, k, 1))
        Debug.Print "Ky tu " & k & ": decimal " & code & ", hex " & Hex(code)
    Next k
End Sub
 
Tôi thường làm bằng tay như sau.

Do khó bôi đen 3 ký tự giữa "kiến" và "trúc" nên tôi bôi đen "kiến trúc" -> Ctrl + C -> chuyển sang Excel -> chọn A1 -> Ctrl + V -> loại bỏ "kiến" và "trúc" để còn lại những gì giữa chúng -> Alt + F11 -> thêm module với code sau và sau đó chạy code
Mã:
Sub test()
Dim s As String, k As Long, code As Long
    s = Sheet1.Range("A1").Value
    For k = 1 To Len(s)
        code = AscW(Mid(s, k, 1))
        Debug.Print "Ky tu " & k & ": decimal " & code & ", hex " & Hex(code)
    Next k
End Sub

Trên file word thì mình sửa lại đoạn code trên như thế nào vậy bạn? Mình có 1 bảng biểu gì đó để nhận ra ký tự này thì mã nó là bao nhiêu, ký tự kia là mã nó bằng bao nhiêu không? vì file mình copy từ trên word về nó phát sinh nhiều mã ký tự lạ lắm, ví dụ như mũi tên cìa sang trái, sang phải.v.v. Mình muốn biết mã ký tự của nó để loại bỉ từng loại ký tự một nhưng không biết mã của nó!
 
Lần chỉnh sửa cuối:
Cảm ơn bạn Batman1 nhiều nhé, mình đã tìm ra cách để xóa các ký tự trên rồi.
Bạn không nói cách làm của bạn nhưng có thể có người quan tâm nên tôi ghi cách tôi làm để mọi người biết.

1. Để tìm ký tự ZERO WIDTH SPACE: mở tập tin word -> click vào trong thẻ Home -> mục Paragraph để có thể nhìn thấy những chỗ có ký tự ZERO WIDTH SPACE với điểm mã bằng 8203 (decimal) -> Home -> Editing -> Find -> nhập vào ^u8203 thì sẽ nhìn thấy như trong hình. u ám chỉ ký tự unicode có mã sau ký tự u

2. Để tìm và xóa ký tự ZERO WIDTH SPACE: mở tập tin word -> Home -> Editing -> Replace -> nhập ^u8203 vào "Find what" -> để trống "Replace with" -> nhấn Replace All.

zero.JPG
Bài đã được tự động gộp:

Trên file word thì mình sửa lại đoạn code trên như thế nào vậy bạn? Mình có 1 bảng biểu gì đó để nhận ra ký tự này thì mã nó là bao nhiêu, ký tự kia là mã nó bằng bao nhiêu không? vì file mình copy từ trên word về nó phát sinh nhiều mã ký tự lạ lắm, ví dụ như mũi tên cìa sang trái, sang phải.v.v. Mình muốn biết mã ký tự của nó để loại bỉ từng loại ký tự một nhưng không biết mã của nó!
Thì tôi cũng có biết mã của ký tự giữa "kiến" và "trúc" đâu? Nhưng tôi làm tay như trình bầy và chạy code thì lòi ra mã mà. Bạn không nhìn thấy mã ở cửa sổ Immediate à?

Nếu chưa có cửa sổ Immediate thì trong VBE nhấn tổ hợp Ctrl + G

ma.JPG
 
Lần chỉnh sửa cuối:
Mình hiểu rồi. Cảm ơn bạn rất nhiều. Do mình không biết cách làm hiện cửa sổ Immediate, nên khi chạy code của bạn ra thì không thấy gì cả. Mình gà mờ lắm, không biết nhiều về VBA đâu, mình chỉ xóa thủ công thôi. Cảm ơn batman1!
 
Mình hiểu rồi. Cảm ơn bạn rất nhiều. Do mình không biết cách làm hiện cửa sổ Immediate, nên khi chạy code của bạn ra thì không thấy gì cả. Mình gà mờ lắm, không biết nhiều về VBA đâu, mình chỉ xóa thủ công thôi. Cảm ơn batman1!
Sau khi biết có 2 ký tự unicode 8203 thì bạn làm như hướng dẫn ở bài #7 để tìm ký tự đó để xóa (Replace All) hoặc tìm chuỗi ban đầu. Tức nhập vào Find
Mã:
kiến ^u8203^u8203trúc thượng mặt cầu
 
Web KT
Back
Top Bottom