2015-06-24 109 views
3

我有两个表一个具有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 
+1

你能举一个很简单的例子,显示你想要* *发生?很难理解你的描述。 – LondonRob

+0

表1 物品ID 盒78 胶87 盒105 表2 物品ID 盒 盒 胶 我想为在表2的ID列,将返回78第一次发现的查找第105盒和第二...等等。 – user290687

+0

所有项目的ID值是否唯一?或者它在一件物品中是唯一的?喜欢可以Box有ID 78和Glue有ID 78吗? – chancea

回答

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 +输入数组公式,然后自动填充了下来。

单元格引用的说明:

A $ 2:A $ 4 - 项目栏(表Sheet 1)

B $ 2:B $ 4 - ID柱(Sheet 1中)

C $ 2:C2 - 物品列(Sheet2的)

C2 - 你仰视

+0

尝试此并获得#Value! – user290687

+0

可能是引用的问题。我认为你应该尝试tigeravatar的解决方案,如果这不适合你回来的确切范围和工作表名称,你需要使用。 – Kyle

0

乍一看,这似乎是不可能的项目,因为VLOOKUP不知道如何处理多个Box es。

但是使用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中做相同的技巧。)

请注意,所有这些公式只需延长表格长度即可。它会一直工作。

+0

这个解决方案的问题是我没有两张纸上的ID。表2中的ID是空白的,我们通过查找来填充它。 – user290687

+0

再次阅读我的答案@ user290687,并稍微想一想。一旦将两个工作表上的每个“盒子”转换为“盒子1”或“盒子2”*,您可以在工作表2上执行“VLOOKUP”。 – LondonRob

1

替代解决方案。不需要帮助列,不需要数组输入。 Sheet 2中单元格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)) 
+0

这个工作非常完美! - 早先的错误是我的。 – user290687

+0

很高兴听到它:) – tigeravatar

0

用于执行此操作的一个好方法是使用阵列式来使用从第二片材的每个项目的重复次数的第一片查找值。此方法不需要“帮助”列。

将实现此的公式为:{=INDEX(Sheet1!A:B,SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2)),2)}

这个公式是一个阵列式。你可以把它复制到细胞B2Sheet2,然后按Ctrl键++输入进入。你必须Ctrl + Shift + 输入使这个数组公式。您可以将这个公式在列B中拖动,以获得所需的行数。

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

我们把这个公式分解成各个组成部分:

  1. 确定有多少次给定的项目已列被重复A.我们用下面的代码来完成这个工作,它将计算当前行的项目出现在列A中所有先前行的次数。范围的开始和结束的相对参考的绝对引用确保范围将自动更新正如我们在B列向下拖动式:

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

    IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),"") 
    
  3. 查找所有正在使用SMALL功能,它从一个阵列选择第n最小项所确定的第n 的值。对于k,我们通过将在步骤1计算

    SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2)) 
    
  4. 最后计数,我们把它一起在INDEX功能,将查找在指定行的值(步骤确定3)和列(2),在给定的范围内。

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