excel中if语句中公式驱动结果的重用 =IFERROR(如果((索引(命名为range1,匹配(命名为range2&A1,命名为range3,0))),索引(命名为range1,匹配(命名为range2&A1,命名为range3,0)),“-”)

excel中if语句中公式驱动结果的重用 =IFERROR(如果((索引(命名为range1,匹配(命名为range2&A1,命名为range3,0))),索引(命名为range1,匹配(命名为range2&A1,命名为range3,0)),“-”),excel,optimization,excel-formula,Excel,Optimization,Excel Formula,在这个公式中,我尝试使用索引匹配垂直查找一个值,并在if语句中检查它是否为空值。如果它不是空的,我将使用非空值在给定单元格中设置它 如何优化公式以减少excel中的性能开销。 我不想通过将结果存储在变量中来使用vba,最耗时的位是Match(),因此避免重复相同的匹配是关键。你可以 将索引/匹配放在辅助单元格中,然后使用公式 =IFERROR(IF((INDEX(named range1,MATCH(named range2&A1,named range3,0)))<>&q

在这个公式中,我尝试使用索引匹配垂直查找一个值,并在if语句中检查它是否为空值。如果它不是空的,我将使用非空值在给定单元格中设置它

如何优化公式以减少excel中的性能开销。
我不想通过将结果存储在变量中来使用vba,最耗时的位是Match(),因此避免重复相同的匹配是关键。你可以

  • 将索引/匹配放在辅助单元格中,然后使用公式

    =IFERROR(IF((INDEX(named range1,MATCH(named range2&A1,named range3,0)))<>"",INDEX(named range1,MATCH(named range2&A1,named range3,0)),"-"),"")
    
然后在所选单元格中使用此公式:

=MATCH(named range2&A1,named range3,0)
=IFERROR(如果((索引(命名为range1,NamedRange4))”,索引(命名为range1,NamedRange4),“-”)

匹配将只计算一次,结果存储在指定的范围内。使用NamedRange4的相对单元格引用,可以在其他单元格中使用IfError公式并获得正确的结果

谢谢teylyn!!明白逻辑了吗
=MATCH(named range2&A1,named range3,0)
=IFERROR(IF((INDEX(named range1,NamedRange4))<>"",INDEX(named range1,NamedRange4),"-"),"")