Find and Replace: Tìm nhiều nội dung sau đó thay thế từng nội dung tương ứng

Liên hệ QC

ithow

Thành viên mới
Tham gia
10/7/09
Bài viết
38
Được thích
2
Mong mọi người giúp tôi vấn đề này với:

Ví dụ tôi có nội dung văn bản như sau:
ABC
zzzzz
XYZ
zzzzzz
DEF
zzzz
MNP
zzzzzzz

Bây giờ làm sao tôi có TÌM VÀ THAY THẾ 1 LẦN DUY NHẤT mà chỉ còn lại nội dung như thế này:
1
zzzzz
2
zzzzzz
3
zzzz
4
zzzzzzz



Tôi xin chân thành cảm ơn

P/s: Tôi dùng Word 2010
 
Hàm tìm và thay thế chỉ làm việc tốt khi đồng nhất dữ liệu, với trường hợp nhiều nội dung khác nhau, có thể lập bảng và dùng công thức. Tuy nhiên với dữ liệu bạn đưa ra, chưa thật sự tổng quát, bạn nói rõ để được trợ giúp tốt hơn.Thân!
 
Lần chỉnh sửa cuối:
Hàm tìm và thay thế chỉ làm việc tốt khi đồng nhất dữ liệu, với trường hợp nhiều nội dung khác nhau, có thể lập bảng và dùng công thức. Tuy nhiên với dữ liệu bạn đưa ra, chưa thật sự tổng quát, bạn nói rõ để được trợ giúp tốt hơn.Thân!


Vâng ạ, tôi xin được trình bày lại như thế này:
Tôi có một nội dung Word dài 300 trang, trong đó tôi muốn tìm và thay thế rất nhiều nội dung, mà mỗi một nội dung lại không giống nhau. Vấn đề là để tìm và thay thế theo cách thủ công thì tôi phải thực hiện rất nhiều lần, nên giờ tôi muốn chỉ thục hiện nó với 1 lần mà thôi.
Tôi xin gửi bức ảnh dưới đây làm ví dụ:





Theo cách hiểu của tôi thì:
[FONT=&quot]Tương ứng với nội dung “ABC” tôi sẽ thay bằng số “1”
Tương ứng với nội dung “XYZ” tôi sẽ thay bằng số “2
Tương ứng với nội dung “DEF” tôi sẽ thay bằng số “3”
Tương ứng với nội dung “MNP” tôi sẽ thay bằng số “4”[/FONT]
Nhưng không được
Ngoài ra tôi cũng đã đọc bài về Find and Replace nâng cao tại trang của Microsoft cũng như đã tìm trên Google nhưng vẫn không ăn thua.
Mong mọi người giúp tôi
 

File đính kèm

  • Untitled.jpg
    Untitled.jpg
    18.7 KB · Đọc: 121
Lần chỉnh sửa cuối:
Nhấn Ctrl A chọn toàn bộ văn bản.
Nhấn Alt + F11, Chép đoạn code sau vào cửa sổ VBA:

Mã:
Sub Macro1()
Dim Strs
Strs = Array("abc", "def", "ghi")
For Each Strt In Strs
    i = i + 1
    With Selection.Find
        .Text = Strt
        .Replacement.Text = i
        .Forward = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub

Rồi chạy code.
 
Trước tiên xin cảm ơn thầy rất nhiều
Ở ví dụ trên em replace 1,2,3,4 như vậy cho nó nhanh thôi
Chứ ý của em là muốn thay thế bằng một chuỗi bất kì do mình qui định thầy ạ

Ví dụ:
Tương ứng với nội dung “ABC” thay bằng “cảm”
Tương ứng với nội dung “XYZ” thay bằng “ơn"
Tương ứng với nội dung “DEF” thay bằng “thầy”
Tương ứng với nội dung “MNP” thay bằng “Mỹ”

Mong thầy giúp đỡ!
 
Lần chỉnh sửa cuối:
Mã:
Sub Macro1()
Dim Strs(1 To 4, 1 To 2)
Strs(1, 1) = "abc": Strs(1, 2) = "chỉ"
Strs(2, 1) = "def": Strs(2, 2) = "cần"
Strs(3, 1) = "ghi": Strs(3, 2) = "nhấn"
Strs(4, 1) = "mno": Strs(4, 2) = "thanks"

For i =1 To 4
    With Selection.Find
        .Text = Strs(i, 1)
        .Replacement.Text = Strs(i, 2)
        .Forward = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub
 
Có lỗi xảy ra rồi thầy ơi, thầy xem lại giúp em với ạ
Sau khi làm theo các bước thầy hướng dẫn em có hình 1 dưới đây
Sau đó em xem lại file word thì chỉ có string đầu tiên được thay thế như hình 2 dưới đây

Mong thầy xem lại giúp với ạ, nếu được thầy save giúp em thành 1 file Word luôn ạ!
 

File đính kèm

  • 1.jpg
    1.jpg
    120.6 KB · Đọc: 15
  • 2.jpg
    2.jpg
    75.9 KB · Đọc: 8
Mới chạy thì có lỗi đó, sau đó thì lại hết! Chả biết sao nữa. File này thì lại chạy ngon.
Chọn hết văn bản hoặc để dấu nháy trên đầu văn bản mới thay được hết. Nó thay từ vị trí con trỏ xuống dưới.
 

File đính kèm

  • replace.doc
    29.5 KB · Đọc: 24
Lần chỉnh sửa cuối:
File của thầy chạy rất tốt nhưng giờ lại phát sinh vấn đề từ phía em
Thầy xem hình trước rồi em giải thích sau nhé (em cũng gửi luôn file Word đính kèm ở cuối bài)

Nói chung là tìm và thay thế đúng như những gì mình muốn, phân biệt chữ hoa, chữ thường đó thầy
 

File đính kèm

  • 1.jpg
    1.jpg
    6.6 KB · Đọc: 15
  • Replace_Can sua lai.doc
    32 KB · Đọc: 19
Lần chỉnh sửa cuối:
Chỉ cần thêm 1 câu lệnh:

Mã:
    With Selection.Find
        .Text = Strs(i, 1)
        .Replacement.Text = Strs(i, 2)
        .Forward = True
        [COLOR="red"][B].MatchCase = True[/B][/COLOR]
    End With
 
Mã:
Sub Macro1()
Dim Strs(1 To 4, 1 To 2)
Strs(1, 1) = "abc": Strs(1, 2) = "chỉ"
Strs(2, 1) = "def": Strs(2, 2) = "cần"
Strs(3, 1) = "ghi": Strs(3, 2) = "nhấn"
Strs(4, 1) = "mno": Strs(4, 2) = "thanks"

For i =1 To 4
    With Selection.Find
        .Text = Strs(i, 1)
        .Replacement.Text = Strs(i, 2)
        .Forward = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub
Em đang nghĩ sao không rút gọn thế này nhỉ?
PHP:
Sub Macro1()
  Dim Strs(1 To 4, 1 To 2)
  Strs(1, 1) = "abc": Strs(1, 2) = "Xin"
  Strs(2, 1) = "DEF": Strs(2, 2) = "cam"
  Strs(3, 1) = "Ghi": Strs(3, 2) = "on"
  Strs(4, 1) = "jkL": Strs(4, 2) = "thay"
  For i = 1 To 4
    Selection.Find.Execute Strs(i, 1), True, , , , , , , , Strs(i, 2), 2
  Next
End Sub
 
Em đang nghĩ sao không rút gọn thế này nhỉ?
PHP:
    Selection.Find.Execute Strs(i, 1), True, , , , , , , , Strs(i, 2), 2
End Sub

Hì, lần đầu tiên trong đời đụng vào VBA for Word, đành phải record macro, mới ra nông nỗi thế. May mà đã xóa bớt rồi đây.
 
Vậy là vấn đề của em đã được giải quyết. Xin chân thành cảm ơn hai thầy ptm0412 và ndu96081631 rất nhiều ạ!
 
Web KT
Back
Top Bottom