【问题标题】:How to check if cells in different sheets are equal?如何检查不同工作表中的单元格是否相等?
【发布时间】:2019-03-08 05:28:50
【问题描述】:

场景:-有 2 张纸正在比较。 Sheet1 的范围是 B2:B,Sheet2 的范围是 C2:C。

要求:

  • Sheet1 B2 = Sheet2 C2
  • Sheet1 B3 = Sheet2 C3 等等...

在下面查看我现有的代码:

Sub MessageCode()

    Dim FoundBlank1 As Range
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Sheet2")
    Dim MyRange As Range, MyCell As Range, MyRange2 As Range, MyCell2 As Range

    Set MyRange = ws.Range("B2:B" & ws.Range("B" & ws.Rows.Count).End(xlUp).Row)
    Set MyRange2 = ws2.Range("C2:C" & ws2.Range("C" & ws2.Rows.Count).End(xlUp).Row)
    Set MyCell2 = MyRange2


    For Each MyCell In MyRange

       If MyCell.Value <> Worksheets("Sheet2").Range("C2").Value Then

            MyCell.Copy
            Worksheets("Sheet3").Select
            Set FoundBlank1 = Range("A1:A1000").Find(What:="", lookat:=xlWhole)
            FoundBlank1.Select
            Selection.PasteSpecial xlPasteValues

            ActiveCell.Offset(0, 1).Value = "Incorrect Value."

        End If

    Next MyCell

    End Sub

【问题讨论】:

  • 那么,如果MyCell.Value Worksheets("Sheet2").Range("C2").Value 那么你想把Sheet1中的值复制粘贴到Sheet2中?从我看到的情况来看,我认为您正在 Sheet1 第 1 行中搜索 C2 FROM Sheet2 的值......并留下说明它不正确......这对我来说有点令人困惑,因为你只在寻找 A 行....你能说出你想要什么,这样我就可以尝试找到一种方法来帮助你
  • @MT32 如果 2 个单元格的值不相等。我将它粘贴到表 3 并在其旁边添加注释“不正确的值”
  • 那么,sheet 1 和 sheet2 会有相同的行数和列数吧?
  • @MT32,No. Sheet1 和 Sheet2 有一个列,其中值应该相同或相等。例子。 Sheet1 A2 列应等于 Sheet2 B2
  • 好的。那么 Sheet3 已经创建好了,那我就不用在代码中创建 sheet3 了吧?

标签: vba excel comparison


【解决方案1】:

如果表 1 和表 2 的行数不同,我已经添加了一些额外的消息框。

试试这个:

Sub Messagecode()

Dim ws As Worksheet
Dim ws2 As Worksheet
Dim lastrow1 As Integer
Dim lastrow2 As Integer
dim lastrow3 as integer
Dim i As Integer

Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
ws1.Activate
lastrow1 = Cells(Rows.Count, 2).End(xlUp).Row
ws2.Activate
lastrow2 = Cells(Rows.Count, 3).End(xlUp).Row

If lastrow1 <> lastrow2 Then
MsgBox ("number of rows in Sheet1 is not equal to number of rows in Sheet2")
End If

For i = 2 To lastrow1
If ws1.Cells(i, 2) <> ws2.Cells(i, 3) Then
ws2.Cells(i, 3).Copy
Worksheets("Sheet3").Activate

lastrow3 = Cells(Rows.Count, 1).End(xlUp).Row
Cells(lastrow3, 1).Offset(1, 0).Activate
ActiveSheet.Paste
Cells(lastrow3, 1).Offset(1, 1) = "incorrect value"


End If
ws1.Activate

Next i
End Sub

【讨论】:

    【解决方案2】:

    您只需为 sheet1 和 sheet3 设置最后一行。运行从 2 到 lastrow 的循环并将 Sheet1.columnB 与 Sheet2.columnC 进行比较 if 然后将 Sheet1 中的值复制到 Sheet3,向右偏移 1 个单元格并粘贴您的文本。您将 +1 添加到 Sheet3 的最后一行,这样您就不会一直在同一个单元格上写...

    Dim i As Long
    Dim lRow As Long
    lRow = Sheet1.Cells(Rows.Count, "B").End(xlUp).Row
    
    Dim lRow3 As Long
    lRow3 = Sheet3.Cells(Rows.Count, "A").End(xlUp).Row
    
        For i = 2 To lRow
            If Sheet1.Cells(i, "B").Value <> Sheet2.Cells(i, "C").Value Then
                Sheet3.Cells(lRow3, "A").Value = Sheet1.Cells(i, "B").Value
                Sheet3.Cells(lRow3, "A").Offset(, 1).Value = "Incorrect Value."
            End If
            lRow3 = lRow3 + 1
        Next i
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 2019-01-09
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多