比较 excel 中的两个列表并从第二个列表中提取缺少的值 - 不能重复(也超过两张纸)

Comparing two lists in excel and extracting values missing from 2nd list - cannot be duplicated (also over two sheets)

我正在编写工作项目报告,我正在尝试找到一种方法来比较两个项目代码列表,即“123456”,并查看第二个列表是否缺少任何本应输入的新值进入第一个列表。这些列表有数千条记录,到目前为止人们一直在手动执行(知道这一点让我很伤心)所以我试图让它自动化。

我尝试过使用带有 Index(Match(CountIF))) 公式的数组,但我似乎无法让它工作。

我的问题是,当我让数组填充我想要的东西时,我无法让它不重复值(我需要它来检查主列表,所以它不会在输出中输出超过一次的东西列表)。

我也试过使用其他公式 - 但列表可能有数千条记录,所以我无法为单元格匹配做一个单元格,因为列表会很大(那个或我的 excel 知识不足以了解简单的解决方案)。

如有任何帮助,我们将不胜感激。

不确定您是否尝试设置它以便将来自动更新,但作为权宜之计:

列表 1 旁边的 Countif 列检查它们是否出现在列表 2 中... ...在 "row" 字段中输入一个仅显示 countif 值为 0 的数据透视表以删除重复项?

这是一种使用 VBA 和数组的方法,它比通过 sheet 更快。它检查 H 中的每个项目以查看它是否存在于 J 中(而不是相反)。我想这就是你想要的。

Sub x()

Dim v1, v2, v3(), i As Long, j As Long

v1 = Range("H2", Range("H" & Rows.Count).End(xlUp)).Value
v2 = Range("J2", Range("J" & Rows.Count).End(xlUp)).Value

ReDim v3(1 To UBound(v1, 1))

For i = LBound(v1) To UBound(v1)
    If IsError(Application.Match(v1(i, 1), v2, 0)) Then
        j = j + 1
        v3(j) = v1(i, 1)
    End If
Next i

Range("K2").Resize(j) = Application.Transpose(v3)

End Sub

使用输入框

Sub x()

Dim v1, v2, v3(), i As Long, j As Long

v1 = Application.InputBox("First list", Type:=8)
v2 = Application.InputBox("Second list", Type:=8)

ReDim v3(1 To UBound(v1, 1))

For i = LBound(v1) To UBound(v1)
    If IsError(Application.Match(v1(i, 1), v2, 0)) Then
        j = j + 1
        v3(j) = v1(i, 1)
    End If
Next i
Range("K2").Resize(j) = Application.Transpose(v3)

End Sub

一个公式解决方案。 请注意,我将前两个范围变成 Tables 并更改了名称。该公式正在使用结构化引用。如果您将来添加行,这将使公式自动更新。

=IFERROR(INDEX(ProjList1[#Data],AGGREGATE(15,6,1/ISNA(MATCH(ProjList1[#Data],ProjList2[#Data],0))*ROW(ProjList1[#Data]),ROWS(:1))-ROW(ProjList1[#Headers])),"")

它是如何工作的?简要地说:

  • MATCH 生成一个 #NA! 错误数组或一个数字。
  • ISNA 将其转换为 TRUE/FALSE 的数组,其中 TRUE 表示 table 1 中不在 table 2[=31 中的条目=]
  • 将该数组乘以项目列表行的数组return错误消息数组与行号
  • AGGREGATE小函数忽略错误returns给出行号的升序列表
  • INDEX 然后 returns 来自 Table 1
  • 的适当条目
  • ROW(ProjList1[#Headers]) 是一个更正,因此 table 可以位于工作表上的任何位置,并且仍然 return 是正确的行。