【问题标题】:Compare data in two spreadsheets and output the data to third spreadsheet比较两个电子表格中的数据并将数据输出到第三个电子表格
【发布时间】:2019-09-24 09:32:42
【问题描述】:

我有两个电子表格,第一个只有 1 列,其中包含 user_id。 第二个有customer_id(与第一张表中的user_id相同)和status

如何在第二个电子表格中找到与第一个电子表格中的 id 匹配的所有行,并将该行的状态输出到第三个电子表格中?

示例数据:

电子表格 1:

  • user_id
  • 1111
  • 2222
  • 3333
  • 4444
  • 5555

电子表格 2:

第一列

  • customer_id
  • 1111
  • 2222
  • 3333
  • 4444
  • 5555

第二栏

  • 状态
  • 有效
  • 待付款
  • 有效
  • 已取消
  • 有效

我不完全确定,但我认为是这样的:

=VLOOKUP(B1,Sheet2!A:B,2,FALSE)

这是一个状态,但不是预期的。

【问题讨论】:

  • 请提供有关您迄今为止为解决该问题所做的尝试的信息。看起来 VBA 是最简单的方法。
  • 或者你可以挖掘超级用户的答案,有些人建议使用spreadsheet compare。但从未尝试过自己..
  • @M.Schalk 我认为问题底部的公式是正确的???
  • 如果您在第二张表中已经有了 ID 及其状态,为什么还要在第三张表中复制呢?你的结果不会和你的第二张纸一样吗?

标签: excel


【解决方案1】:

首先,这可以通过Index/Match 语句来完成,如下所示:

=INDEX(Sheet1!$A:$B,MATCH(Sheet2!$A1,Sheet1!$A:$A,0),2)

您将工作表和范围更改为正确的位置。这会将工作表 2(客户 ID)中的第一个条目与工作表 1 中的范围 A:A(用户 ID)相匹配,然后在匹配时返回工作表 1 列 B(状态)中的值。您可以将其放入工作表 3 并向下拖动填充手柄以覆盖工作表 2 的所有内容。

但是,如果我正确阅读了该问题,则可能会有多个匹配项的选项。如果是这样,最好使用 vba 循环来完成。如果你想让我调查一下,请告诉我。

【讨论】:

    【解决方案2】:

    我以前做过类似的事情,如果你想通过 VBA 完成它,它会循环行直到定义的最后一行,比较一些列,然后将行复制粘贴到新工作表中。您绝对可以通过更改一些内容从下面的代码中工作。

    Sub finddata()
    
    Dim s As Worksheet
    Dim uniqueId As String
    Dim finalrow As Long
    Dim i As Long
    Dim c As Long
    Dim rngSearch As Range
    Dim rngFound As Range
    Dim finalcolumn As Long
    Dim offset As Integer
    
    Application.ScreenUpdating = True
    
    uniqueId = Sheets("Data").Range("B2").Value
    finalrow = Sheets("Data").Range("G100000").End(xlUp).Row
    finalcolumn = Sheets("Data").Range("XFD1").End(xlToLeft).Column
    offset = 3
    
    Set s = Sheets("Data")
    Set rngSearch = s.Range(s.Cells(2, 5), s.Cells(finalrow, 5))
    
    Sheets("DataValidation").Range("A1:C100000").ClearContents
    
        For i = 2 To finalrow
            uniqueId = s.Cells(i, 2).Value
            Set rngFound = rngSearch.Find(What:=uniqueId, LookIn:=xlValues, LookAt:=xlWhole)
            If rngFound Is Nothing Then
                s.Range(Cells(i, 1), Cells(i, 6)).Copy
                Sheets("DataValidation").Range("A1048575").End(xlUp).offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
                End If
        Next i
    
    MsgBox "Done"
    End Sub
    

    【讨论】:

    • 或者,你可以使用一个不错的 if(index(match,但这不会给你一个复制粘贴到新工作表的结果,它会给你一个过滤匹配的好方法虽然价值
    【解决方案3】:

    您可以如下图所示进行比较。

    enter image description here

    您将获得如第二个屏幕截图所示的结果。

    enter image description here

    【讨论】:

    • 这不是问题要问的。
    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多