Tìm kiếm từ trong word

tuhocvba

Administrator
Thành viên BQT
Word có chế độ tìm kiếm mạnh, nếu nắm được, sẽ giản tiện rất nhiều cho code VBA. Do đó đây là kiến thức cần thiết cho tôi và cho các bạn.
Tìm và tô sáng đoạn văn bản tìm được
Để dễ dàng nhận biết các cụm từ tìm được, bạn có thể tô sáng nó trên màn hình (không tô sáng khi in ra).
- Trong thẻ Home, nhóm Editing, nhấn nút Find (Ctrl+F).
- Trong hộp Find what, nhập văn bản mà bạn muốn tìm.
- Nhấn Reading Highlight, sau đó chọn Highlight All.
- Tất cả từ tìm được sẽ được tô sáng. Để tắt tính năng này đi, bạn nhấn Reading Highlight lần nữa, chọn Clear Highlighting.
Tìm và thay thế những định dạng đặc biệt
- Trong thẻ Home, nhóm Editing, bạn nhấn nút Replace (Ctrl+H).
- Nhấn nút More nếu bạn không nhìn thấy nút Format.
- Để tìm kiếm đoạn văn bản với định dạng đặc biệt, bạn hãy nhập đoạn văn đó trong ô Find what. Nếu chỉ để tìm kiếm định dạng, hãy để trống ô này.
- Nhấn nút Format, sau đó chọn định dạng mà bạn muốn tìm.
- Nhấn vào ô Replace with, sau đó nhấn Format, chọn định dạng thay thế. Nếu bạn cũng muốn thay thế bằng đoạn văn bản, hãy nhập đoạn text đó vào ô Replace with.
- Nhấn Find Next, nhấn tiếp Replace để tìm và thay thế các định dạng đặc biệt. Để thay thế toàn bộ, nhấn Replace All.
Tìm và thay thế các dấu đoạn, ngắt trang và các mục khác
- Trong hộp thoại Find and Replace xuất hiện sau khi nhấn Ctrl+H, bạn nhấn nút More nếu không thấy nút Special.
- Nhấn vào ô Find what, sau đó nhấn nút Special và chọn một mục cần tìm.
- Nhập những gì bạn muốn thay thế trong ô Replace with.
- Nhấn Find Next, Replace hoặc Replace All.
Sử dụng ký tự đại diện khi tìm kiếm (Quan trọng-hay sử dụng trong VBA)
- Bật hộp thoại Find and Replace lên.
- Nhấn nút More để mở rộng hộp thoại.
- Đánh dấu kiểm vào ô Use wildcards.
- Nhập từ cùng những ký tự đại diện vào ô Find what.
- Nhập những gì bạn muốn thay thế trong ô Replace with.
- Nhấn Find Next, Replace hoặc Replace All.
Bảng các ký tự đại diện
Đại diệnNhậpVí dụ
Một ký tự bất kỳ ?“s?t” tìm “sat” và “set”.
Một dãy ký tự*“s*d” tìm “sad” và “started”.
Bắt đầu một từ <“<(inter)” tìm “interesting”, “intercept”. Không tìm “splintered”.
Cuối một từ >“(in)>” tìm “in”, “within”. Không tìm “interesting”.
Một trong những ký tự chỉ định []“w[io]n” tìm “win” và “won”.
Một ký tự bất kỳ trong dãy[-]“[r-t]ight” tìm “right” và “sight”. Dãy phải theo thứ tự tăng dần.
Một ký tự bất kỳ, trừ những ký tự cho sẵn trong ngoặc[!x-z] “t[!a-m]ck” tìm “tock”, “tuck”. Không tìm “tack” hay “tick”.

Để tìm một ký tự định nghĩa như một ký tự đại diện, bạn gõ dấu \ trước ký tự đó. Chẳng hạn gõ \? để tìm dấu hỏi. Bạn có thể sử dụng dấu ngặc đơn để nhóm các ký tự đại diện và đoạn text để chỉ ra thứ tự phép tính. Ví dụ gõ <(pre)*(ed)> để tìm “presorted” và “prevented”.

Bạn có thể sử dụng ký tự đại diện \n để tìm kiếm một biểu thức và thay thế bằng một biểu thức được sắp xếp. Ví dụ gõ (Office) (Word) vào ô Find what và gõ \2 \1 vào ô Replace with. Kết quả là chương trình sẽ tìm cụm từ Office Word và thay bằng Word Office.
Nguồn:
 

tuhocvba

Administrator
Thành viên BQT
Trong Word có rất nhiều kiểu tìm kiếm khác nhau. Trong bài viết này tôi muốn giới thiệu kiểu tìm kiếm sử dụng MatchWildcards . Bằng cách này, người dùng có thể nâng cao tính linh hoạt của tìm kiếm, và đây được coi là điểm rất mạnh về hỗ trợ tìm kiếm của Word, được đánh giá là mạnh hơn Excel.
Đầu tiên, tôi khái quát lại tổ hợp các trường hợp tìm kiếm bằng ký tự đại diện:
Ký tựÝ nghĩaVí dụ
?Một ký tự tùy ýCâu ?.
*Một hay nhiều ký tự bất kỳCâu *.
<Từ bắt đầu<pre
>Từ kết thúcfix>
[ ]Một ký tự hay số nào đó trong dấu ngoặc này[abcde]
[-]Một ký tự hay số nào đó nằm trong phạm vi được nói tới trong dấu ngoặc[0-9] hoặc [a-zA^Z]
[!]Một ký tự hay số nằm ngoài phạm vi được nói tới trong dấu ngoặc[!abcde]
( )Nhóm hóa và tạo thành công thức([0-9]{1,3})
{n}Ký tự hay công thức phía trước được lặp lại n lầngo{2}gle
{n,}Ký tự hay công thức phía trước được lặp lại từ n lần trở lên[0-9]{1,}
{n,m}Ký tự hay công thức phía trước lặp lại từ n~m lần[0-9]{1,3} page
@Ký tự hay công thức phái trước lặp lại từ 1 lần trở lênlo@p

1. Sử dụng
Khi sử dụng tìm kiếm và thay thế (Ctr +H) với chức năng tìm từ đại diện như trên, thì trong Option tìm kiếm bạn phải tích chọn vào MatchWildcards.
Còn đối với VBA Word thì phải thiết định:
Mã:
Find Object.MatchWildcards = True
2. Báo lỗi
Hãy chạy thử đoạn code sau:
Mã:
Sub findPattern()

With Selection.Find
    .Text = "Câu?."
    .MatchWildcards = True
    Do While .Execute
        Stop
    Loop
End With

End Sub
Nó sẽ báo lỗi 6182. Dịch ra đại ý là MatchPhrase, MatchWildcards,MatchSoundsLike,MatchAllWordForms,MatchFuzzy không thể thiết định đồng thời là True.
Xin lưu ý là code trên không hề thiết định cái gì khác ngoài MatchWildcards. Nhưng trong các tham số còn lại có thể Word đã mặc định nó là True.
Vì vậy code trên muốn đúng, chính xác khi chạy trên mọi máy tính mà không sợ Word tự ý thiết định thông số nào là True thì phải sửa thành:
Mã:
Sub findPattern()
With Selection.Find

    .Text = "Câu?."
    .MatchFuzzy = False
   ' .MatchAllWordForms = False
    '.MatchSoundsLike = False
    '.MatchPhrase = False
    .MatchWildcards = True

    Do While .Execute
        Stop
    Loop
End With
Có thể thấy một số Tool Word do giáo viên làm và bán (hoặc chia sẻ ra ngoài) đã không làm tốt vấn đề trên. Chạy trên máy tính của tôi bị lỗi 6182, buộc lòng tôi phải google tìm hiểu, nhờ vậy mà hôm nay các bạn được đọc bài viết này của tôi.
Thuộc tínhGiá trị mặc địnhÝ nghĩa
MatchWildcards
FALSE​
Sử dụng tìm kiếm ký tự thay thế
MatchSoundsLike
FALSE​
Tìm gần đúng (tiếng anh)
MatchAllWordForms
FALSE​
Kiểu loại từ khác (tiếng anh, vd danh từ động từ) cũng đều tìm kiếm
IgnoreSpace
FALSE​
Phớt lờ khoảng trống
IgnorePunct
FALSE​
Phớt lờ chấm câu
MatchFuzzy
TRUE​
Tìm kiếm gần đúng (tiếng nhật)

Nếu dùng MatchPhrase thì sẽ hỗ trợ cả hai thiết định sau cùng lúc: Phớt lờ khoảng trống, phớt lờ chấm câu (không quan tâm).
3. Ví dụ:
Mã:
[0-9]{1,3}Page
thì phần văn bản sau sẽ được tìm kiếm thấy:
Hãy mở 1Page, 20Page, 300Page ,5222Page ra nào.
Ý nghĩa: Các số từ 0-9 lặp lại từ 1 đến 3 lần. Do đó ở trên nếu là số có 4 chữ số là chịu, không tìm kiếm được (5222Page không được tìm thấy).
Mã:
[0-9,]{1,}VND
thì phần văn bản sau sẽ được tìm kiếm thấy:
10VND, 200VND, 3000VND, 40000VND, 500000VND, được phân phát cho mọi người.
Tham khảo và dịch từ:
 

Euler

Administrator
Thành viên BQT
Mã:
Sub MyReplace()
    kensaku = "tu_khoa_tim_kiem"
    chikan = "tu_can_thay_the"
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = kensaku
        .Replacement.Text = chikan
        .Wrap = wdFindContinue
        .MatchAllWordForms = False
        .MatchByte = False
        .MatchCase = False
        .MatchFuzzy = False
        .MatchPhrase = False
        .MatchSoundsLike = False
        .MatchWholeWord = False
        .MatchWildcards = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
MatchAllWordForms: Từ cần tìm và từ thay thế tuy khác kiểu hình thức sử dụng thì vẫn tiến hành thay thế. Nếu để là True thì nó sẽ thay thế từ nó tìm thấy hoặc tìm thấy gần giống mà nghĩa tương đương. Chả hạn bạn cần thay từ good bằng từ bad. Vậy thì trong trường hợp này nếu gặp từ best thì nó sẽ thay thế thành bad hoặc worse, worst. Nói tóm lại với anh em dùng tiếng việt tốt nhất thiết định nó là False cho lành.

MatchByte: Phân biệt zenkaku và hankaku. Nếu để là True là có phân biệt. Với bạn nào không dùng bộ gõ tiếng nhật thì không cần quan tâm.

MatchCase: Phân biệt chữ thường và chữu in hoa. Nếu để là True là có phân biệt.

MatchFuzzy: Tìm gần giống. Cái này cho ai dùng bộ gõ tiếng nhật. Nếu để True thì nó không cần biết hiragana hay katana, kanji ra làm sao. Ví dụ tìm かえる với カエル thì nó coi hai từ này là một. Anh em dùng tiếng việt thì nên để nó là False.

MatchPhrase: Nếu để là True thì nó phớt lờ dấu cách hay dấu xuống dòng. Ví dụ thay thế từ "hom qua" thành "OK" thì những từ sau "hom qua", "ho m qua", "h om qua",... đều chuyển thành "OK".

MatchWholeWord: Giống như tiếng anh, các khoảng trống (dấu cách) truwocs và sau đều có thể có ý nghĩa. Chả hạn khi chuyển từ "dog" thành "cat", như vậy nếu có từ "hot dog" thì sẽ bị chuyển thành "hot cat". Nhưng nếu gặp từ "hotdog" thì nó không chuyển. Nếu để là False thì nó không quan tâm có hay không có dấu cách hay không, nó sẽ thực hiện chuyển. Tốt nhất mọi người nên để nó là False.
MatchWildcards:Tìm ký tự đại diện. Chú ý không thể thiết định đồng thời là True các tham số: MatchPhrase,MatchWildcards,MatchSoundsLike,MatchAllWordForms,MatchFuzzy .

Nguồn:
 
Top