Excel Lookup返回唯一值

时间:2015-06-24 18:58:38

标签: excel

我有两张床单

Item   ID
Box    78
Glue   105
Box    85

另一张

Item    ID
Box
Box
Glue

在第二张纸上,我想从第一张纸上查找ID

我在那里重复(如在Box中)我希望一次返回ID个。 因此,Box上的查询将在第一次返回78,第二次返回85

像这样:

Item    ID
Box     78
Box     85
Glue    105

4 个答案:

答案 0 :(得分:1)

替代解决方案。不需要帮助列,不需要数组输入。在Sheet2单元格B2中并向下复制:

=INDEX(Sheet1!$B$2:$B$4,MATCH(1,INDEX((Sheet1!$A$2:$A$4=A2)*(COUNTIF(B$1:B1,Sheet1!$B$2:$B$4)=0),),0))

答案 1 :(得分:0)

你可以使用INDEX / MATCH的轻微变化:

 =INDEX(B$2:B$4,SMALL(IF(A$2:A$4=C2,ROW(B$2:B$4)-1,""),COUNTIF(C$2:C2,C2)))

使用Ctrl + Shift + Enter确认为数组公式,然后自动填充。

单元格引用的说明:

2美元:4美元 - 项目栏(sheet1)

B $ 2:B $ 4 - ID栏(sheet1)

C $ 2:C2 - 项目栏(表2)

C2 - 您正在查找的项目

答案 2 :(得分:0)

乍一看这似乎不可能,因为VLOOKUP并不知道如何处理多个Box

但是使用this ingenious answer你实际上可以让它发挥作用。

在工作表1上,输入公式:

Some formulae for sheet 1

结果是:

item    instance    combined    id  range_above
Box     1           Box1        78  $A$2:$A$2
Glue    1           Glue1       105 $A$2:$A$3
Box     2           Box2        85  $A$2:$A$4

您现在可以VLOOKUP关闭combined而不是关闭item。 (显然你必须在表2中做同样的技巧。)

请注意,所有这些公式都可以延长,无论你的表多长。它总会正常工作。

答案 3 :(得分:0)

执行此操作的一个好方法是使用数组公式,使用第二个工作表中每个项目的重复次数从第一个工作表中查找值。这种方法不需要帮助"列。

完成此任务的公式为:{=INDEX(Sheet1!A:B,SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2)),2)}

此公式是数组公式。您可以将其复制到B2上的单元格Sheet2,然后按 Ctrl + Shift + 输入输入。您必须 Ctrl + Shift + 输入以使其成为数组公式。您可以将此公式向下拖动到B列,直到您想要的行数。

完成后,您的工作表将包含以下公式: Finished Worksheet

让我们将这个公式分解为其组成部分:

  1. 确定在A列中重复给定项目的次数。我们使用以下代码完成此操作,该代码将计算当前行项目在所有先前行中出现的次数在A列中。范围起点的绝对参考和结束的相对参考确保在我们在B列中向下拖动公式时范围将自动更新:

    COUNTIF($A$2:$A2,"="&$A2)
    
  2. 识别Sheet1中包含Sheet2列A中项目的第k 行。以下代码首先使用IF语句在Sheet1中查找所有行,其中包含Sheet2的A列中的项目。这使用数组语法将指定范围内的所有行与值进行比较。 IF语句返回一个数组,其中包含已找到的行(如果找到)。如果没有找到,则返回空字符串。

    IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),"")
    
  3. 查找使用SMALL函数标识的 nth 行的值,该函数从数组中选择 nth 最小项。对于k,我们会传递在步骤1中计算的计数。

    SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2))
    
  4. 最后,我们将所有内容放在INDEX函数中,该函数将在给定范围内查找指定行(在步骤3中标识)和列(2)中的值。 / p>

    {=INDEX(Sheet1!A:B,SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2)),2)}