我有两张床单
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
答案 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上,输入公式:
结果是:
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列,直到您想要的行数。
完成后,您的工作表将包含以下公式:
让我们将这个公式分解为其组成部分:
确定在A列中重复给定项目的次数。我们使用以下代码完成此操作,该代码将计算当前行项目在所有先前行中出现的次数在A列中。范围起点的绝对参考和结束的相对参考确保在我们在B列中向下拖动公式时范围将自动更新:
COUNTIF($A$2:$A2,"="&$A2)
识别Sheet1中包含Sheet2列A中项目的第k 行。以下代码首先使用IF
语句在Sheet1中查找所有行,其中包含Sheet2的A列中的项目。这使用数组语法将指定范围内的所有行与值进行比较。 IF
语句返回一个数组,其中包含已找到的行(如果找到)。如果没有找到,则返回空字符串。
IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),"")
查找使用SMALL
函数标识的 nth 行的值,该函数从数组中选择 nth 最小项。对于k
,我们会传递在步骤1中计算的计数。
SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2))
最后,我们将所有内容放在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)}