Excel:编写使用索引/匹配的公式然后检查相关单元格中的值,并在发现错误时研究下一个匹配项

时间:2015-01-26 21:09:40

标签: excel excel-vba excel-formula vba

Here is a spreadsheet I quickly made up to try and explain the problem.

我需要在C coulmn中有一个公式转到第二张表并撤回数据但是如果它在D列中出现错误我需要它返回并搜索下一个匹配,直到不再有N / A值,或者一旦搜索到数据库,就会产生“未使用”消息。在我的实际项目中,我在三组列中有25,000行,所以我很遗憾不能真正手工完成。

我目前的公式尝试:

  

= INDEX(数据库!$ A $ 2:$ A $ 5,MATCH(B3,数据库!$ B $ 2:B $ 5,0),IF(ISERROR(D3),INDEX('数据库'!$ A $ 2:$ 5美元,MATCH(B3,'组件数据库'!B $ 2:$ B $ 5,0)+2),“”)

我尝试过其他一些IF / IFERROR / IFISERROR,但是当使用“+ 1,+ 2等”时,它们都会导致无限循环或只是一个超过一定行数的随机值在比赛功能之后。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

如果你使用IFERROR,你可以"筑巢"几个公式,以便它们连续运行,直到一个成功,例如

=IFERROR(INDEX/MATCH1,IFERROR(INDEX/MATCH2,IFERROR(INDEX/MATCH3,"No matches)))

INDEX/MATCH 1, 2 and 3替换为实际公式(不包括=

那将从第一个公式得到你的结果.....除非它是一个错误,在这种情况下你从第二个得到结果....除非那是一个错误,在在哪种情况下,你可以得到公式3的结果....除非这是一个错误,在这种情况下你会得到"没有匹配"。您可以多次嵌套(最多64个是限制)

答案 1 :(得分:0)

使用这种格式让它更深入地工作两个级别。

=IF(
  AND(
    INDEX(*Table with value you want returned*, 
    MATCH(*Specific Cell*, *Table to search for cell*, 0)), 

  ISERROR(
    INDEX(*Table of hidden helper column with first result when value is searched*, 
    MATCH(*Cell to see if there is an error*, *Table with return value*, 0)))), 
        IFERROR(
            INDEX(*Table with value you want returned*,
            SMALL(
                IF(*Column*=*Value to be matched in column*,
                    ROW(*Column with matched value*)-ROW(*First Cell of Column with matching value*)+1,
                    ROW(*Last cell in Match Column*)+1),*which match you want returned (1st, 2nd, 3rd, etc... (in 1, 2, 3, etc. format))*),1),  

  INDEX(*Table with value you want returned*, 
  MATCH(*Specific Cell*, *Table to search for cell*, 0))))