Vba 如何比较两个不同工作表上的两个不同列并突出显示差异?

Vba 如何比较两个不同工作表上的两个不同列并突出显示差异?,vba,excel,Vba,Excel,我希望能够比较两个工作表,并在ws1上的H列和ws2上的F列中的日期存在差异时突出显示ws2上的单元格。我遇到的问题是,它们是两个不同的列,从两个不同的单元格开始(比较ws1上的H9+和ws2上的F10+),这没有给我错误,但似乎什么都没有发生。以下是我到目前为止的情况: Sub matchMe() Dim wS As Worksheet, wT As Worksheet Dim r1 As Range, r2 As Range Dim cel1 As Range, cel2 As Range

我希望能够比较两个工作表,并在ws1上的H列和ws2上的F列中的日期存在差异时突出显示ws2上的单元格。我遇到的问题是,它们是两个不同的列,从两个不同的单元格开始(比较ws1上的H9+和ws2上的F10+),这没有给我错误,但似乎什么都没有发生。以下是我到目前为止的情况:

Sub matchMe()
Dim wS As Worksheet, wT As Worksheet
Dim r1 As Range, r2 As Range
Dim cel1 As Range, cel2 As Range

Set wS = ThisWorkbook.Worksheets("Project Status Report L3")
Set wT = ThisWorkbook.Worksheets("Demand Mapping - Active")

With wS
    Set r1 = .Range("H9", .Cells(.Rows.Count, .Columns("R:R").Column).End(xlUp))
End With

With wT
    Set r2 = .Range("F10", .Cells(.Rows.Count, .Columns("G:G").Column).End(xlUp))
End With

On Error Resume Next
For Each cel1 In r1
    With Application
        Set cel2 = .Index(r2, .Match(cel1.Value, r2, 0)) 'find match in sheet2
        If Err = 0 Then
            If cel1.Offset(, 8) <> cel2.Offset(, 8) Then cel2.Interior.ColorIndex = 1  'if difference, color
        End If
        Err.Clear
    End With
Next cel1
Sub matchMe()
将wS设置为工作表,将wT设置为工作表
调光r1为量程,r2为量程
调光cel1作为范围,cel2作为范围
设置wS=ThisWorkbook.Worksheets(“项目状态报告L3”)
Set wT=ThisWorkbook.Worksheets(“需求映射-活动”)
与wS
设置r1=.Range(“H9”),.Cells(.Rows.Count、.Columns(“R:R”).Column).End(xlUp))
以
带wT
设置r2=.Range(“F10”),.Cells(.Rows.Count、.Columns(“G:G”).Column).End(xlUp))
以
出错时继续下一步
对于r1中的每个cel1
应用
设置cel2=.Index(r2.Match(cel1.Value,r2,0))'在sheet2中查找匹配项
如果Err=0,则
如果cel1.Offset(,8)cel2.Offset(,8),则cel2.Interior.ColorIndex=1'如果差异,则为颜色
如果结束
呃,明白了
以
下一个cel1

End Sub

我不久前在网上找到了这段代码,它应该可以满足您的需要。只需将shtBefore和shtAfter设置为工作表名称

Sub compareSheets(shtBefore As String, shtAfter As String)

Dim mycell As Range
Dim mydiffs As Integer

For Each mycell In ActiveWorkbook.Worksheets(shtAfter).UsedRange
    If Not mycell.Value = ActiveWorkbook.Worksheets(shtBefore).Cells(mycell.Row, mycell.Column).Value Then

        mycell.Interior.Color = vbYellow
        mydiffs = mydiffs + 1

    End If
Next

MsgBox mydiffs & " differences found", vbInformation

ActiveWorkbook.Sheets(shtAfter).Select

End Sub

为什么不使用而不是
.Index
?很有用,但遗憾的是,我需要一些针对特定列的内容,因为我正在比较两个具有不同字段的独立报告,这意味着整个工作表的颜色一般都是“不同的”。但是谢谢!你可以试着改变范围吗?可能会添加
工作表(ShtAfter).Range(G:G)
或将整个工作表的范围缩小到您需要的列
Sub comparison()
For i = 2 To 1000
For j = 2 To 1000
If Worksheets(Worksheet).Range("A" & i).Value = Worksheets(Worksheet).Range("L" & j).Value Then
Worksheets(worksheet).Range("N" & j).Select
With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With

End If
Next j
Next i
End Sub