使用INDEX MATCH FUNCTION克服#REF错误

时间:2018-07-31 06:11:29

标签: excel

我收到参考错误,我不理解其背后的逻辑。任何人都可以帮助我。在此先感谢!

表格1:

SKU   Reference  Type   PP_1      PP_2
A       A         X     61.99    17.9975
A      A-A        Y     56.99    
A      A-S        Y     56.99    
B       B         X     68.99    19.7475
B      B-A        Y     68.99    

表格2:

SKU   Reference  Type   PP_3      
A       A         X     17.9975 
A      A-A        Y     #REF     
A      A-S        Y     #REF     
B       B         X    19.7475   
B      B-A        Y    #REF

OUTPUT_REQUIRED:

SKU   Reference  Type   PP_3      
A       A         X    17.9975  
A      A-A        Y    56.99         
A      A-S        Y    56.99         
B       B         X    19.7475   
B      B-A        Y    68.99

我尝试过的配方奶粉

=INDEX(Sheet1!D:E,MATCH(A5,Sheet1!A:A,0),MATCH(C5,{"X"," ","Y"},0)+AND(VLOOKUP(A5,Sheet1!A:C,3,FALSE)="X"))

3 个答案:

答案 0 :(得分:0)

在D2 sheet2中,您可以放置​​

  =IFERROR(IF(C2="Y",VLOOKUP(B2,Sheet1!$B$2:$E$6,3,FALSE),VLOOKUP(B2,Sheet1!$B$2:$E$6,4,FALSE)),"")

然后填写

Data

答案 1 :(得分:0)

在公式=INDEX(Sheet1!D:E,MATCH(A5,Sheet1!A:A,0),MATCH(C5,{"X"," ","Y"},0)+AND(VLOOKUP(A5,Sheet1!A:C,3,FALSE)="X"))中,您的第一个INDEX正在查找两列宽(D和E)的数组(如果需要,可以是范围或矩阵)。但是,用于列号{"X"," ","Y"}的MATCH数组将为 X 提供 1 ,为提供 2 空格 3 表示 Y 。看来您的 #REF 错误是由于在两列宽的数组中查找第3列而来的,这就是为什么只在Y项目上出现 #REF 错误的原因。请尝试:

=INDEX(Sheet1!D:E,MATCH(A5,Sheet1!A:A,0),MATCH(C5,{"X","Y"},0)+AND(VLOOKUP(A5,Sheet1!A:C,3,FALSE)="X"))

答案 2 :(得分:0)

我真的不明白您的公式,但是我认为这可以为您提供所需的信息:

=INDEX(Sheet1!D:E,ROW(),MATCH(Sheet1!C2,{"Y","X"},0))

由于您似乎已经将值从Sheet1复制到当前工作表中,因此可以将其缩短为:

=INDEX(D:E,ROW(),MATCH(C2,{"Y","X"},0))

我将其放在单元格D2中,然后将其复制到列中,为我提供以下内容:

17.9975
56.99
56.99
19.7475
68.99

特别是,这部分使我与您的原始公式相混淆:

+ AND(VLOOKUP(A2,Sheet1!A:C,3,FALSE)=“ X”)

这是被添加到列中的TRUE / FALSE值。它在第一列中查找值,然后在列C中返回第一个值。A的第一个实例是第2行,B的第一个实例是第5行,因此对于所有带有“ A”的行,它都返回“ X” (即从第2行开始)和所有带有“ B”的行(即从第5行开始)为“ X”。由于它始终为TRUE,因此我摆脱了这一点,您可以通过加1来实现相同的目的。

这部分我也很困惑:

MATCH(C2,{"X"," ","Y"},0)

对于“ X”返回1,对于“”返回2,对于“ Y”返回3。我认为您想将“ X”的第2列和“ Y”的第1列,如果C列为空白,我不知道要返回哪一个。我将其更改为:

MATCH(C2,{"Y","X"},0)

如果在C列为空的情况下需要处理的情况,则它不包含在原始帖子中,因此我不知道您想如何处理它。

由于A中的值不是唯一的,所以此部分将查找第一行,其中当前行的值为Column A,因此它将再次为“ A”找到2,为“ B”找到5:

MATCH(A2,Sheet1!A:A,0)

我认为您可以改用它:

MATCH(B2,Sheet1!B:B,0)

假设B中的值是唯一的,但是由于您似乎想要当前行,因此将其更改为ROW()。

我希望这会有所帮助。