如何生成一个数字列表,跳过另一个列表中包含的数字?

时间:2015-08-23 10:20:41

标签: excel array-formulas

让我试着解释......

假设我有清单2,5,8。

我想生成一个跳过这些数字的新列表。现在假设我的新列表的起点是连续的范围1到8.不幸的是,这个第二个列表重复了第一个列表中的3个数字,因此第二个列表中的数字需要调整适当的数量以删除这些重复

第1名单:2 5 8

第二名单:1 2 3 4 5 6 7 8

adj list:1 3 4 6 7 9 10 11

为了得到调整后的列表,我根据第一个列表有效地添加了一个偏移量:

偏移量:0 1 1 2 2 3 3 3

要跳过第二个列表中的2(因为它出现在第一个列表中),我必须添加位置2偏移量;即2 + 1 = 3。

重要的是要理解先前的调整也会影响第二个列表中的值,即使该值未出现在第一个列表中也是如此;例如6出现在第二个列表中但不出现在第一个列表中,但仍需要进行调整以保留第二个列表与结果调整列表之间的关系。因此,第二个列表中的6由位置6偏移调整:即6 + 3 = 9。

当第一个列表中存在/是连续的数字范围时,事情会变得更复杂:

第1名单:2 5 6 9

第二名单:1 2 3 4 5 6 7 8

adj list:1 3 4 7 8 10 11 12

偏移量:0 1 1 3 3 4 4 4

我正在寻找的是一个Excel数组公式来计算偏移量。但是......有很多条件:

  1. 第一个列表最多包含5个未分类的数字。
  2. 第二个列表最多可包含54个未分类的数字。
  3. 所有数字都是正整数。
  4. 避免辅助细胞。
  5. 绝对没有VBA。
  6. 我愿意采用其他方式来达到最终结果,但我更倾向于使用自包含的数组公式。

    我会非常有兴趣看看你能窥探的是什么,不包括VBA。

    非常感谢,

2 个答案:

答案 0 :(得分:0)

困难是“未分类”的事情。这是一种从另一个列表中排除一个列表的方法。将要排除的项目列表放在 A 列中,并将大型候选列表放在 B 列中。然后在 C1 中输入:

=IF(ISERROR(MATCH(B1,A$1:A$8,0)),B1,"")

并复制下来。这是一个例子:

enter image description here

我们可以生成一个没有空白单元格的列表,甚至可以排序,但这可能需要帮助列。

答案 1 :(得分:0)

我认为这是一个更简洁的解决方案,但是, List1 List2 已正确定义,并假设您拥有Excel 2010或更高版本(如果需要进行小更改,则需要进行更改)不):

=IF(ROWS($1:1)>COUNT(List2),"",IF(ROWS($1:1)>SUMPRODUCT(1-ISNUMBER(MATCH(List2,List1,0))),MAX(List1)+ROWS($1:1)-SUMPRODUCT(1-ISNUMBER(MATCH(List2,List1,0))),AGGREGATE(15,6,List2/(1-ISNUMBER(MATCH(List2,List1,0))),ROWS($1:1))))

向下复制,直到你开始得到空白。

此致