【问题标题】:Mark letters that differ between two cells in Excel在 Excel 中标记两个单元格之间不同的字母
【发布时间】:2020-03-31 09:54:39
【问题描述】:

给定两个单元格,每个单元格都包含一个长度为 n(即 11)的字符串,我想将底部单元格中与顶部单元格不同的所有字母标记为粗体、红色。

这是一个玩具示例:

为什么这很有用?我需要相互比较许多氨基酸序列,这将是生物学家在 Excel 中可视化结果的好方法。

【问题讨论】:

  • 这些值是实际的文本字符串吗?还是它们是公式的结果?如果是后者,该过程将删除公式并仅用文本字符串替换它们。
  • 它们是实际的文本字符串。

标签: excel vba string-comparison


【解决方案1】:

以下函数比较两个字符串,假设 'rngWord1' 为原始字符串,而 'rngWord2' 为要更改的字符串:

Sub comparetwostrings(rngWord1 As Excel.Range, rngWord2 As Excel.Range)
    Dim l As Long

    If rngWord1.Value <> rngWord2.Value Then

        For l = 1 To Len(rngWord1.Value)   

            If Mid(rngWord1.Value, l, 1) <> Mid(rngWord2.Value, l, 1) Then
                rngWord2.Characters(l, 1).Font.Color = vbRed
                rngWord2.Characters(l, 1).Font.Bold = True    
            Else 
                rngWord2.Characters(l, 1).Font.Color = vbBlack   
            End If

        Next l

    End If
End Sub

要运行该函数,可以创建一个名为CompareAllStrings 的命令按钮。在内部,一个范围被定义为循环,并执行成对的字符串比较。 'rng1' 和 'Offset' 都应该根据具体的 Excel 布局进行调整:

Private Sub btnCompareAllStrings_Click()
    Dim rng1 As Range, e As Range

    Set rng1 = Range("B2:Z2")
    For Each e In rng1
        comparetwostrings e, e.Offset(1, 0)
        comparetwostrings e.Offset(2, 0), e.Offset(3, 0)
    Next
End Sub

【讨论】:

  • 命令 'comparetwostrings(range("i1"),range("i2"))' 必须去哪里才能用正确的字体替换 "i2"?
  • 当你想比较时你会调用它,第一个范围是compareto,第二个范围是tocompare,所以在这个例子中,I1 是保存它应该是什么的单元格,而 i2是您希望与之比较的内容。
猜你喜欢
  • 2015-06-05
  • 2016-05-30
  • 2013-04-27
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多