有没有办法为公式块设置别名,以便以后在 MS Excel 中的相同公式中使用?

有没有办法为公式块设置别名,以便以后在 MS Excel 中的相同公式中使用?

是否可以为公式块添加别名,并在稍后在同一公式中引用它?例如,假设我有一个 IF 表达式,并且逻辑测试组件本身是一个复杂的公式,如果测试结果为 false,我希望再次使用它,如下所示:

=IF(Do_this()=0,"NA",Do_this())

答案1

如果您有 Excel O365您可以使用 LET() 函数,也可以使用名称管理器中的 LAMBDA() 函数来完成此操作。

让()

同时使用 LET() 函数和 alt-enter 在公式中创建不间断的回车符,可以同时实现两个目标:

  • 简化公式以提高可读性并从而提高未来的可维护性;
  • 通过仅计算一次值并在公式中重复使用该值来优化性能。

假设您的“Do_This”是一个公式,对单元格 A1 中的球员姓名执行 3 次“XLOOKUP”,并对分数表中找到的值求和:

=LET(
score1, XLOOKUP(A1, scoreTable1[players], scoreTable1[scores], 0),
score2, XLOOKUP(A1, scoreTable2[players], scoreTable1[scores], 0),
score3, XLOOKUP(A1, scoreTable3[players], scoreTable1[scores], 0),
totalScore, score1 + score2 + score3,
If( totalScore = 0, “NA”, totalScore )
)

易于阅读、易于理解,并且分离如何从逻辑上收集数据什么收集数据后,需要执行哪些操作。这 3 个查找仅执行一次,而不是两次,这可以非常对于大型复杂板材的性能具有重要意义。

名称管理器中的 LAMBDA

还需要 O365。您现在可以进入名称管理器并使用该LAMBDA()函数创建一个函数。您可以GetTotalScore()使用 Lambda 定义一个函数,然后在单元格公式中只需使用以下逻辑:

=IF( GetTotalScore(A1) = 0, "NA", GetTotalScore(A1) )

一旦定义了名称,您就可以像使用内置函数=GetTotalScore("Joe Smith")一样使用它。GetTotalScore()

我上面的 if 语句调用了两次函数,所以如果你只想要可读性而不是更好的性能,那没问题。但你可以更进一步,仍然使用 LET()一个名为 LAMBDA:

=LET(
totalScore, getTotalScore(A1),
IF( totalScore = 0, "NA", totalScore )
)

现在您仅调用了一次公式并且拥有可读的代码。

最后,请记住,您可以在名称管理器中“构建”复杂的 LAMBDA。当公式变得非常复杂时,这很有用:

  • 定义 Lambda getScore1
  • 定义另一个 Lambda getScore2
  • 定义另一个 Lambda getScore3
  • 定义一个将它们加在一起的 totalScore Lambda。

相关内容