Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel中标记两个单元格之间不同的字母_Excel_Vba_String Comparison - Fatal编程技术网

在Excel中标记两个单元格之间不同的字母

在Excel中标记两个单元格之间不同的字母,excel,vba,string-comparison,Excel,Vba,String Comparison,给定两个单元格,每个单元格包含一个长度为n(即11)的字符串,我想用粗体、红色标记底部单元格中与顶部单元格不同的所有字母 以下是一个玩具示例: 这为什么有用?我需要相互比较许多氨基酸序列,这将是生物学家在Excel中可视化结果的一个好方法。以下函数比较两个字符串,假设“rngWord1”为原始字符串,“rngWord2”为要更改的字符串: Sub comparetwostrings(rngWord1 As Excel.Range, rngWord2 As Excel.Range) Di

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

以下是一个玩具示例:


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

以下函数比较两个字符串,假设“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

这些值是实际的文本字符串吗?还是公式的结果?如果是后者,则该过程将删除公式并仅用文本字符串替换它们。它们是实际的文本字符串。命令“compareTowostrings(range(“i1”)、range(“i2”)”必须到哪里才能将“i2”替换为正确的字体?您可以在需要比较时调用它,第一个范围是
compare to
,第二个范围是
tocompare
,因此在本例中,I1是保存它应该是什么的单元格,i2是您希望与之进行比较的单元格。
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