从列中的序列号列表中查找缺失的条目?

DMA*_*361 5 microsoft-excel-2007 worksheet-function microsoft-excel

我有一个 Excel 表,其中包含 66000 个测试用例的结果。或者,至少它应该……

现在,因为我正在异步运行测试并不断停止和启动,所以我有先见之明以确保将测试编号放入输出中。现在,根据这些测试数字使用 Excel 2007 的删除重复项功能后,我发现我有 65997 行数据。所以他们三个失踪了。

这里的工作是找到丢失的任务编号。

测试编号在 A 列中,按升序排列,并且保证没有重复。其他数据放置在其他列中,并且这些数据必须与其测试编号一起保留。

  |    A
--+---------
1 | testNum
2 | 1
3 | 2
4 | 3
5 | ...
Run Code Online (Sandbox Code Playgroud)

假设有太多的测试用例无法手动执行此搜索,因为我有另一个数据集接近一百万个项目,我很快将不得不对其进行类似的工作。

我可以用 VBA 解决这个问题,但想知道我是否缺少一个更直接的解决方案?

kop*_*hke 5

假设您的数据在 A 列中并从第 2 行开始,请在从第 2 行开始的空闲列中选择一个范围,并至少包括与您应该获得结果一样多的行(这很重要:如果您的范围包含的单元格少于您的总数序列,缺失结果的列表将被截断)1 . 在公式栏中 -而不是直接在单元格中!– 插入以下公式:

=IFERROR(
   SMALL(
     IF(
       ISNA(MATCH(ROW(A1:A66000)-1,A2:A66001,0)),
       ROW(A1:A66000)-1,
     ""),
   ROW()-1),
 "")
Run Code Online (Sandbox Code Playgroud)

– 注意这需要写在一行上;这里的缩进只是为了可读性。按 将其存储为数组公式Ctrl+Shift+Enter。如果您正确执行此操作,则公式将显示在大括号中,并且当您尝试编辑数组区域中的单个单元格时,Excel 会报错。

对于下面屏幕截图的 A 列中的值,在B2:B21(20 行,因为完整序列将是 1 到 20)中存储为数组公式的公式将在 B 列中返回以下值:

序列中缺失值的公式化列表的屏幕截图

如您所见,这些是序列中缺失的数字(在屏幕截图中突出显示)。


  1. 在选择要应用的范围时,您可能会犯错误,只要ROW(A1:AXXXXX)引用包含的行数正好等于您的总序列(在您的示例中为 66000 行,因此A1:A66000)。