Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Vba 如果第一个单元格的内容为真,则比较两个不同工作表中的行内容_Vba_Excel - Fatal编程技术网

Vba 如果第一个单元格的内容为真,则比较两个不同工作表中的行内容

Vba 如果第一个单元格的内容为真,则比较两个不同工作表中的行内容,vba,excel,Vba,Excel,我要做的是编写一个宏,比较sheet1和sheet2中的行并突出显示差异。你可以看到下面的宏 我的问题是,如果在第一张工作表中添加或删除一行或多行,所有其他行都会上移/下移,从而导致许多单元格在第二张工作表中被标记 因为A列中有一个标识符,所以我尝试实现一个额外的行,该行首先在表1中查找相同的标识符,一旦找到,就比较表1和表2的行,这两行具有相同的标识符,然后标记潜在的差异 由于到目前为止我所有的想法都失败了,或者文件速度很慢,我希望你能帮助我。 多谢各位 Sub comparing() Dim

我要做的是编写一个宏,比较sheet1和sheet2中的行并突出显示差异。你可以看到下面的宏

我的问题是,如果在第一张工作表中添加或删除一行或多行,所有其他行都会上移/下移,从而导致许多单元格在第二张工作表中被标记

因为A列中有一个标识符,所以我尝试实现一个额外的行,该行首先在表1中查找相同的标识符,一旦找到,就比较表1和表2的行,这两行具有相同的标识符,然后标记潜在的差异

由于到目前为止我所有的想法都失败了,或者文件速度很慢,我希望你能帮助我。 多谢各位

Sub comparing()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim rCount As Long, cCount As Long
Set sh1 = Worksheets(ActiveWorkbook.Worksheets.Count() - 1)
Set sh2 = Worksheets(ActiveWorkbook.Worksheets.Count)
rCount = sh1.Cells(Rows.Count, 1).End(xlUp).Row
cCount = sh1.Cells(1, Columns.Count).End(xlToLeft).Column
Dim r As Long, c As Integer
For r = 1 To rCount
    For c = 1 To cCount
        If sh1.Cells(r, c) <> sh2.Cells(r, c) Then
           sh2.Cells(r, c).Interior.ColorIndex = 6
        End If
    Next c
Next r
Worksheets(Worksheets.Count).Select
Sub比较()
尺寸sh1作为工作表,sh2作为工作表
Dim rCount As Long,Account As Long
设置sh1=工作表(ActiveWorkbook.Worksheets.Count()-1)
Set sh2=工作表(ActiveWorkbook.Worksheets.Count)
rCount=sh1.Cells(Rows.Count,1).End(xlUp).Row
cCount=sh1.Cells(1,Columns.Count).End(xlToLeft).Column
Dim r为长,c为整数
对于r=1,则为rCount
对于c=1的情况,应计算
如果是sh1.Cells(r,c)sh2.Cells(r,c),那么
sh2.单元(r,c).内部.ColorIndex=6
如果结束
下一个c
下一个r
工作表(工作表.计数)。选择

End Sub

我还没有完全测试过这一点,但是您可以在第一个for循环中使用worksheetfunction
match
来查找第二个工作表中的对应行:

Sub comparing()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim rCount As Long, cCount As Long
    Set sh1 = Worksheets(ActiveWorkbook.Worksheets.Count() - 1)
    Set sh2 = Worksheets(ActiveWorkbook.Worksheets.Count)
    rCount = sh1.Cells(Rows.Count, 1).End(xlUp).row
    cCount = sh1.Cells(1, Columns.Count).End(xlToLeft).Column
    Dim r As Long, c As Integer, sh2Row As Long
    For r = 1 To rCount
        'Find the matching row in Sheet2 by using the value in Column A from both sheets
        sh2Row = Application.WorksheetFunction.Match(sh1.Cells(r, 1).Value, sh2.Range("A:A"))
        For c = 1 To cCount
            If sh1.Cells(r, c) <> sh2.Cells(sh2Row, c) Then
               sh2.Cells(sh2Row, c).Interior.ColorIndex = 6
            End If
        Next c
    Next r
    Worksheets(Worksheets.Count).Select
End Sub
Sub比较()
尺寸sh1作为工作表,sh2作为工作表
Dim rCount As Long,Account As Long
设置sh1=工作表(ActiveWorkbook.Worksheets.Count()-1)
Set sh2=工作表(ActiveWorkbook.Worksheets.Count)
rCount=sh1.Cells(Rows.Count,1).End(xlUp).row
cCount=sh1.Cells(1,Columns.Count).End(xlToLeft).Column
Dim r等于长,c等于整数,sh2Row等于长
对于r=1,则为rCount
'使用两张工作表中A列中的值查找工作表2中的匹配行
sh2Row=Application.WorksheetFunction.Match(sh1.Cells(r,1.Value,sh2.Range(“A:A”))
对于c=1的情况,应计算
如果sh1.细胞(r,c)sh2.细胞(sh2Row,c),则
sh2.单元格(sh2Row,c).Interior.ColorIndex=6
如果结束
下一个c
下一个r
工作表(工作表.计数)。选择
端接头

sheet2是否始终保持不变?sheet2是否保持不变,是的。我想我已经给出了答案。同时,我建议仅为第1页创建标识符,基于第2页上的行号,因为第2页不会更改。嘿,非常感谢您迄今为止的输入。我尝试了你的代码,首先发生的是,它标记了完全相同的单元格。在sheet1中添加一行后,我收到一个错误,指出他找不到与WorksheetFunction对象匹配的属性。有什么想法吗?也许它没有正确设置
rCount
?那些Application.WorksheetFunctions在错误报告方面可能有点奇怪。