Trong quá trình soạn thảo văn bản, đôi khi bạn có thể gặp phải tình trạng có nhiều đoạn văn bản giống nhau hoặc trùng lặp. Điều này không chỉ làm giảm chất lượng của văn bản, mà còn làm tốn thời gian và dung lượng lưu trữ. Vậy làm thế nào để loại bỏ các đoạn văn bản trùng lặp một cách nhanh chóng và hiệu quả? Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách sử dụng VBA (Visual Basic for Applications) để xóa các đoạn văn bản trùng lặp trong Word.
Trường hợp của tôi là chuyển bộ câu hỏi IC3 – GS5 (235 câu) thành chuẩn H5P để đưa lên Moodle làm bài trắc nghiệm. Trong quá trình chỉnh sửa tôi nhận thấy có nhiều câu hỏi trùng lặp, tuy nhiên việc tìm từng câu là rất nhàm chán và mất thời gian.
Tôi dùng VBA để tự động tô đậm và sau đó loại bỏ những đoạn văn bản trùng nhau. Kết quả tôi đã loại bỏ được 7 trang. Dưới đây là cách làm.
Nội dung chính
Bước 1: Mở trình soạn thảo mã VBA
Để bắt đầu, hãy mở Microsoft Word và mở tài liệu chứa đoạn văn bản cần loại bỏ các đoạn giống nhau. Nhấn tổ hợp phím Alt + F11 để mở trình soạn thảo mã VBA.
Bước 2: Sao chép mã VBA
Sao chép mã VBA dưới đây và dán nó vào cửa sổ trình soạn thảo mã VBA:
Sub HighlightDuplicates() Dim StartTime As Date, SecondsElapsed As Date Dim secondsPerComparison As Double Dim I As Long, J As Long, PC As Long, totalComparisons As Long, comparisonsDone As Long, C As Long, secondsToFinish As Long Dim xRngFind As Range, xRng As Range Dim xStrg As String, minutesToFinish As String Dim currentParag As Paragraph, nextParag As Paragraph 'Options.DefaultHighlightColorIndex = wdYellow Application.ScreenUpdating = False With ActiveDocument ' Thông báo trước khi bắt đầu MsgBox "Bấm OK để bắt đầu tô đậm những đoạn văn bản giống nhau.", vbInformation, "Bắt đầu..." StartTime = Now() C = 0 PC = .Paragraphs.Count totalComparisons = CLng((PC * (PC + 1)) / 2) Set currentParag = .Paragraphs(1) For I = 1 To PC - 1 If currentParag.Range.HighlightColorIndex <> wdYellow Then If currentParag.Range.HighlightColorIndex <> wdBrightGreen Then Set nextParag = currentParag For J = I + 1 To PC Set nextParag = nextParag.Next If currentParag.Range.Text = nextParag.Range.Text Then currentParag.Range.HighlightColorIndex = wdBrightGreen nextParag.Range.HighlightColorIndex = wdYellow Debug.Print "found one!! " & " I = " & I & " J = " & J & nextParag.Range.Text End If Next End If End If DoEvents comparisonsDone = PC * (I - 1) + (J - I) SecondsElapsed = DateDiff("s", StartTime, Now()) secondsPerComparison = CLng(SecondsElapsed) / comparisonsDone secondsToFinish = CLng(secondsPerComparison * (totalComparisons - comparisonsDone)) minutesToFinish = Format(secondsToFinish / 86400, "hh:mm:ss") elapsedTime = Format(SecondsElapsed / 86400, "hh:mm:ss") Debug.Print "Finished processing paragraph " & I & " of " & PC & ". Elapsed time = " & elapsedTime & ". Time to finish = " & minutesToFinish Set currentParag = currentParag.Next Next End With ' Hiển thị thông báo về thời gian hoàn thành SecondsElapsed = DateDiff("s", StartTime, Now()) secondsPerComparison = CLng(SecondsElapsed) / comparisonsDone secondsToFinish = CLng(secondsPerComparison * (totalComparisons - comparisonsDone)) minutesToFinish = Format(secondsToFinish / 86400, "hh:mm:ss") elapsedTime = Format(SecondsElapsed / 86400, "hh:mm:ss") MsgBox "Đã tô đậm những đoạn văn bản giống nhau." & vbCrLf & _ "Thời gian hoàn thành: " & minutesToFinish & " (" & elapsedTime & " đã trôi qua).", vbInformation, "Hoàn thành!" ' Bật lại cập nhật màn hình Application.ScreenUpdating = True End Sub
Bước 3: Thực thi mã VBA
Đóng cửa sổ thoạn thảo VBA, quay về văn bản đang mở bấm phím ALT + F8 chọn HighlightDuplicates bấm Run để thực thi mã VBA. Một hộp thoại sẽ xuất hiện yêu cầu bạn bấm OK để bắt đầu quá trình loại bỏ các đoạn văn bản trùng nhau.
Bước 4: Xem kết quả
Nếu văn bản của bạn dài thì thời gian thực hiện đoạn mã này cũng khá lâu, bạn nên đứng dậy làm một ly cafe chờ nó hoàn thành. Sau khi thực hiện xong, mã VBA sẽ tự động tô đậm những đoạn văn bản trùng nhau trong tài liệu.
Mã VBA này sẽ tô đậm (Text Hightlight Color) các đoạn văn bản trùng nhau bằng màu vàng. Phần văn bản xuất hiện lần đầu tiên sẽ là mà xanh.
Bước 5: Xử lý trùng lặp
Trong yêu cầu này tôi chỉ cần lọa bỏ những câu trùng lặp do đó đầu tiên tôi 1️⃣Copy câu hỏi xuất hiện lần đầu. 2️⃣Bấm Ctrl + F
Bây giờ chỉ cần xóa nó đi là xong, bạn có thể bấm mũi tên để đến vị trí trùng lặp hoặc quay về vị trí câu hỏi đang kiểm tra.
Như vậy, bạn đã biết cách sử dụng VBA để loại bỏ các đoạn văn bản trùng lặp trong Word. Đây là một cách tiện lợi và tiết kiệm thời gian khi bạn phải xử lý nhiều văn bản có nội dung tương tự. Hy vọng bài viết này đã mang lại cho bạn những thông tin hữu ích và thú vị. Cảm ơn bạn đã theo dõi và hẹn gặp lại trong những bài viết tiếp theo.
Lưu ý rằng, việc thực hiện mã VBA có thể làm thay đổi tài liệu của bạn. Vì vậy, hãy sao lưu tài liệu của bạn trước khi chạy mã VBA để tránh mất dữ liệu không mong muốn.