【问题标题】:VBA to compare two columns and return value for unmatched dataVBA比较两列并返回不匹配数据的值
【发布时间】:2018-10-29 13:46:40
【问题描述】:

我正在尝试使以下宏工作,但它一直将每个值都返回为“已到达”。

Sub CompareSheets()
    Dim cell As Range
    Dim found As Range

    For Each cell In Sheets("Current").Range("D3:D500")
        Set found = Sheets("Update").Range("D2:D500").Find(cell, LookAt:=xlWhole)

        For Each found In Sheets("Update").Range("D2:D500")
            If Not cell Like found Then cell.Offset(0, 8) = "Arrived"
        Next found
    Next cell

End Sub

【问题讨论】:

  • 在Like 比较中可能需要一些通配符。查看所有通配符比较运算符:support.office.com/en-us/article/…
  • 我想我们需要查看cell 和found 中的值的一些示例。一些正确的例子和一些不正确的例子
  • 感谢您的快速响应,我试图找出两个不同工作表上两列之间的差异。如果未找到匹配项,则 k (0,8) 列中的值应为“已到达”
  • 为什么不使用 VLOOKUP? support.office.com/en-us/article/…
  • 按照下面的@vityata'a 答案,您可能会发现在If Not cell Like found Then cell.Offset(0, 8) = "Arrived" 行的代码中添加breakpoint 很有用,这样可以查看不同的值变量。在调试代码时,通常更容易查看特定情况下的特定行为,在这种情况下您知道答案应该是什么,而不是试图在脑海中“一次解决所有问题”

标签: excel vba compare


【解决方案1】:

尝试打印If 条件中发生的情况,您很可能会看到解决方法:

For Each cell In Sheets("Current").Range("D3:D500")
    Set found = Sheets("Update").Range("D2:D500").Find(cell, LookAt:=xlWhole)
    For Each found In Sheets("Update").Range("D2:D500")
        If Not cell Like found Then
            cell.Offset(0, 8) = "Arrived"
            MsgBox "Cell is " & cell.Value2 & " and found is " & found.Value2
        End If
    Next found
Next cell

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多