excel - 比较两个单元格并显示另一个单元格中的变化

标签 excel vba compare

我正在尝试比较不同单元格中的两个句子并以红色显示差异。
我的代码是比较每个字母的位置。当它发现差异时,它会以红色显示,这很好。
问题是,如果一个单词被一个不同数量的字母改变,句子的其余部分也会显示为红色。
举个例子:
enter image description here
在这张图片中,你可以看到找到一个单词后,其余的单词即使相同,也显示为不同。
这是我目前正在使用的代码:

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/

    相关文章:

    c# - 使用 OpenXML 将背景图像添加到 Excel

    vba - Worksheets.Add 在 UDF 中不起作用

    excel - 检查一个组合框是否为空而另一个组合框是否为空

    Ruby Axlsx 如何添加包含合并单元格的行

    python - 使用 xlsxwriter,无法打开 Excel 文件。文件扩展名无效

    javascript - 数组比较不起作用

    excel - 从 Excel VBA 浏览文件

    excel - WorksheetFunction.Month 对象错误不支持属性或方法

    c# - 比较来自同一类的两个对象与大量字段

    python - 比较Python中连续元组列表的第一个元素