我正在尝试比较不同单元格中的两个句子并以红色显示差异。
我的代码是比较每个字母的位置。当它发现差异时,它会以红色显示,这很好。
问题是,如果一个单词被一个不同数量的字母改变,句子的其余部分也会显示为红色。
举个例子:
在这张图片中,你可以看到找到一个单词后,其余的单词即使相同,也显示为不同。
这是我目前正在使用的代码:
Sub Compare()
For i = 1 To Len(ActiveSheet.Range("F1").Value)
If (ActiveSheet.Range("F1").Characters(i, 1).Text <> ActiveSheet.Range("G1").Characters(i, 1).Text) Then
ActiveSheet.Range("F1").Characters(i, 1).Font.Color = RGB(255, 0, 0)
End If
Next i
End Sub
此外,此代码仅适用于选定的单元格。如何使其适用于整个列(F 和 G)?
最佳答案
比较两个单元格中的单词
Option Explicit
Sub CompareTwoCellsTEST()
Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
CompareTwoCells ws.Range("A1"), ws.Range("B1")
End Sub
Sub CompareTwoCells(ByVal ChangeCell As Range, ByVal CompareCell As Range)
Dim Change() As String: Change = Split(CStr(ChangeCell.Value))
Dim Compare() As String: Compare = Split(CStr(CompareCell.Value))
Dim n As Long
Dim Pos As Long
Dim ch As Long
Dim ErrNum As Long
Dim sChange As String
Dim sCompare As String
For n = 0 To UBound(Change)
sChange = Change(n)
On Error Resume Next
sCompare = Compare(n)
On Error GoTo 0
If Len(sCompare) > 0 Then
If StrComp(sChange, sCompare, vbBinaryCompare) <> 0 Then
For ch = 1 To Len(sChange)
If ErrNum = 0 Then
On Error Resume Next
If Mid(sChange, ch, 1) <> Mid(sCompare, ch, 1) Then
ChangeCell.Characters(Pos + ch, 1) _
.Font.Color = vbRed
End If
ErrNum = Err.Number
On Error GoTo 0
Else
ChangeCell.Characters(Pos + ch, 1).Font.Color = vbRed
End If
Next ch
ErrNum = 0
End If
sCompare = vbNullString
End If
Pos = Pos + Len(sChange) + 1
Next n
End Sub
关于excel - 比较两个单元格并显示另一个单元格中的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72713953/