Cách đánh dấu văn bản / từ trùng lặp trong ô Excel

Hướng dẫn cho thấy cách đánh dấu các từ hoặc chuỗi văn bản trùng lặp trong một ô bằng VBA.

Định dạng có điều kiện trong Excel giúp bạn có thể đánh dấu các bản sao bằng mọi cách có thể mà bạn có thể nghĩ ra: có hoặc không có 1st lần xuất hiện, trong một cột hoặc nhiều cột, các ô trùng lặp liên tiếp và toàn bộ các hàng dựa trên các giá trị giống hệt nhau trong một cột chính. Nhưng, như thường lệ, có một “nhưng”. Các quy tắc định dạng có điều kiện hoạt động ở cấp độ ô trong khi bạn có thể muốn đánh dấu văn bản trùng lặp thay vì toàn bộ ô. Điều này chỉ có thể được thực hiện với macro. Ngay cả khi bạn không có bất kỳ kinh nghiệm nào với VBA, xin đừng vội đóng trang này. Tại đây, bạn sẽ tìm thấy các ví dụ mã sẵn sàng sử dụng và hướng dẫn chi tiết về cách sử dụng chúng trong trang tính của bạn.

Đánh dấu các từ trùng lặp trong một ô bỏ qua chữ hoa chữ thường

Ví dụ này cho thấy cách tô bóng các từ hoặc chuỗi văn bản trùng lặp trong một ô bằng màu chữ đỏ như thể hiện trong hình dưới đây. Xin lưu ý rằng chữ thường và chữ hoa được coi là các ký tự giống nhau. Ví dụ, trái cam, TRÁI CAMtrái cam được coi là cùng một từ.
Đánh dấu các từ trùng lặp trong một ô bỏ qua chữ hoa chữ thường

Mã của macro như sau:

Public Sub HighlightDupesCaseInsensitive()
	Dim Cell As Range
	Dim Delimiter As String

	Delimiter = InputBox("Enter the delimiter that separates values in a cell", "Delimiter", ", ")

	For Each Cell In Application.Selection
		Call HighlightDupeWordsInCell(Cell, Delimiter, False)
	Next
End Sub

Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " ", Optional CaseSensitive As Boolean = True)
	Dim text As String
	Dim words() As String
	Dim word As String
	Dim wordIndex, matchCount, positionInText As Integer

	If CaseSensitive Then
		words = Split(Cell.Value, Delimiter)
	Else
		words = Split(LCase(Cell.Value), Delimiter)
	End If

	For wordIndex = LBound(words) To UBound(words) - 1
		word = words(wordIndex)
		matchCount = 0

		For nextWordIndex = wordIndex + 1 To UBound(words)
			If word = words(nextWordIndex) Then
				matchCount = matchCount + 1
			End If

		Next nextWordIndex

		If matchCount > 0 Then
			text = ""

			For Index = LBound(words) To UBound(words)
				text = text & words(Index)

				If (words(Index) = word) Then
					Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed
				End If

				text = text & Delimiter
			Next
		End If
	Next wordIndex
End Sub

Đánh dấu văn bản trùng lặp trong ô phân biệt chữ hoa chữ thường

Trong hầu hết các tình huống, chúng ta có xu hướng bỏ qua chữ hoa khi làm việc với các mục nhập văn bản trong Excel. Tuy nhiên, trong một số trường hợp nhất định, trường hợp văn bản vẫn quan trọng. Ví dụ: nếu bạn đang xử lý ID, mật khẩu hoặc các bản ghi khác thuộc loại đó, các chuỗi như 1-AA, 1-aa1-Aa không trùng lặp và không được đánh dấu:
Macro phân biệt chữ hoa chữ thường để đánh dấu văn bản trùng lặp trong một ô

Trong trường hợp này, hãy sử dụng phiên bản mã sau:

Public Sub HighlightDupesCaseSensitive()
	Dim Cell As Range
	Dim Delimiter As String

	Delimiter = InputBox("Enter the delimiter that separates values in a cell", "Delimiter", ", ")

	For Each Cell In Application.Selection
		Call HighlightDupeWordsInCell(Cell, Delimiter, True)
	Next
End Sub

Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " ", Optional CaseSensitive As Boolean = True)
	Dim text As String
	Dim words() As String
	Dim word As String
	Dim wordIndex, matchCount, positionInText As Integer

	If CaseSensitive Then
		words = Split(Cell.Value, Delimiter)
	Else
		words = Split(LCase(Cell.Value), Delimiter)
	End If

	For wordIndex = LBound(words) To UBound(words) - 1
		word = words(wordIndex)
		matchCount = 0

		For nextWordIndex = wordIndex + 1 To UBound(words)
			If word = words(nextWordIndex) Then
				matchCount = matchCount + 1
			End If
		Next nextWordIndex

		If matchCount > 0 Then
			text = ""

			For Index = LBound(words) To UBound(words)
				text = text & words(Index)

				If (words(Index) = word) Then
					Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed
				End If

				text = text & Delimiter
			Next
		End If
	Next wordIndex

End Sub

Cách sử dụng macro để đánh dấu các từ trùng lặp trong Excel

Nếu bạn là người mới bắt đầu sử dụng VBA, hướng dẫn từng bước dưới đây sẽ hướng dẫn bạn một cách thoải mái. Người dùng có kinh nghiệm có thể chỉ cần chọn liên kết tải xuống và bỏ qua phần còn lại 🙂

Thêm mã vào sổ làm việc của bạn

Bạn bắt đầu với việc chèn mã của macro vào sổ làm việc Excel của mình. Đây là cách thực hiện:

  1. Mở sổ làm việc mà bạn muốn đánh dấu các bản sao.
  2. nhấn Alt + F11 để mở Trình soạn thảo Visual Basic.
  3. Trên ngăn bên trái, bấm chuột phải ThisWorkbook và chọn Chèn > Mô-đun từ menu ngữ cảnh.
  4. Dán mã vào cửa sổ Mã.
  5. Để giữ macro để sử dụng trong tương lai, hãy nhớ lưu sổ làm việc của bạn dưới dạng tệp .xlsm được kích hoạt macro.

Ngoài ra, bạn có thể tải xuống sổ làm việc mẫu của chúng tôi và chạy macro từ đó. Sổ làm việc mẫu chứa các macro sau:

  • HighlightDupesCaseInsensitive – tô màu trùng lặp trong một ô bỏ qua chữ cái.
  • HighlightDupesCaseSensitive – làm nổi bật sự giả mạo trong một ô xem xét chữ cái.

Để biết thêm thông tin, vui lòng xem Cách chèn mã VBA trong Excel.

Chạy macro

Với mã được thêm vào sổ làm việc của riêng bạn hoặc tệp mẫu của chúng tôi được tải xuống và mở, hãy chạy macro theo cách sau:

  1. Trong trang tính của bạn, hãy chọn các ô mà bạn muốn đánh dấu văn bản trùng lặp. Đây có thể là một dải ô hoặc nhiều dải ô không liền kề.
  2. nhấn Alt + F8.
  3. Chọn macro quan tâm và nhấp vào Chạy.
    Chạy macro để đánh dấu các từ trùng lặp trong Excel.
  4. Macro sẽ yêu cầu bạn chỉ định dấu phân tách phân tách các giá trị trong các ô đã chọn. Dấu phân cách đặt trước (dấu phẩy và dấu cách trong trường hợp của chúng tôi) sẽ tự động xuất hiện trong hộp nhập liệu. Tùy thuộc vào nhu cầu của bạn, bạn có thể để lại dấu phân cách mặc định hoặc nhập một dấu khác, sau đó bấm OK.
    Nhập dấu phân tách phân tách các giá trị trong các ô đã chọn.

Một lúc sau, tất cả các chuỗi trùng lặp trong các ô đã chọn sẽ được tô bóng bằng màu đỏ (hoặc bất kỳ màu phông chữ nào được đặt trong mã của bạn).

Cách điều chỉnh mã theo nhu cầu của bạn

Với những lưu ý sử dụng này và những kiến ​​thức cơ bản về VBA (hoặc chỉ cần làm theo các hướng dẫn bên dưới), bạn có thể dễ dàng sửa đổi các mã phù hợp với nhu cầu của mình.

Đặt trên cùng một mô-đun

Như bạn có thể nhận thấy, cả hai macro (HighlightDupesCaseSensitiveHighlightDupesCaseInsensitive) gọi HighlightDupeWordsInCell chức năng. Sự khác biệt giữa hai macro ở trên chỉ là ở 3rd tham số (Phân biệt chữ hoa chữ thường) được truyền cho hàm đã nói.

Đối với tìm kiếm phân biệt chữ hoa chữ thường, nó được đặt thành TRUE:

Call HighlightDupeWordsInCell(Cell, Delimiter, True)

Đối với tìm kiếm không phân biệt chữ hoa chữ thường, nó được đặt thành FALSE:

Call HighlightDupeWordsInCell(Cell, Delimiter, False)

Để các macro hoạt động, mã của HighlightDupeWordsInCell chức năng phải được đặt trên cùng một mô-đun với các macro.

Dấu phân cách

Khi chạy, macro sẽ yêu cầu bạn chỉ định dấu phân cách phân tách các từ / chuỗi trong các ô đã chọn. Dấu phân cách mặc định là dấu phẩy và dấu cách (“,”) và nó được đặt trước trong InputBox:

Delimiter = InputBox("Specify the delimiter that separates values in a cell", "Delimiter", ", ")

Trong mã của bạn, bạn có thể tự do sử dụng bất kỳ (các) ký tự nào khác làm dấu phân cách được xác định trước.

Màu sắc

Theo mặc định, HighlightDupeWordsInCell chức năng tô màu các bản sao bằng màu chữ đỏ. Màu được xác định trong dòng này:

Cell.Characters(positionInText, Len(word)).Font.Color = vbRed

Ở đây, vbRed là một loại hằng số màu VBA. Để hiển thị bản sao bằng một màu khác, bạn có thể thay thế vbRed bằng một hằng số khác như vbGreen, vbYellow, vbBlue, v.v. Tdanh sách các hằng số màu được hỗ trợ có thể được tìm thấy đây.

Đó là cách làm nổi bật các từ trùng lặp trong ô Excel. Tôi cảm ơn bạn đã đọc và hy vọng sẽ gặp bạn trên blog của chúng tôi vào tuần tới!