【问题标题】:Is there a way to shorten the excel formula?有没有办法缩短excel公式?
【发布时间】:2022-11-18 15:16:22
【问题描述】:

我正在寻找一种方法来缩短我的公式。我是 excel 的新手,不知道如何缩短公式,我做了几次尝试,但总是出错。我敢肯定,对于更有经验的人来说,这将是一个微不足道的问题。

我希望有人能帮助我,我很感激任何回应。

=SUM(IF((ISNUMBER(SEARCH("Bench",$P$9:$U$11)))+(ISNUMBER(SEARCH("Press",$P$9:$U$11)));V9:V11*$W$9:$W$11,0))+SUM(IF((ISNUMBER(SEARCH("Bench",$P$19:$U$21)))+(ISNUMBER(SEARCH("Press ";$P$19:$U$21)));V19:V21*$W$19:$W$21;0))+SUM(IF((ISNUMBER(SEARCH("Bench",$P$29:$U$31)))+(ISNUMBER(SEARCH("Press",$P$29:$U$31)));V29:V31*$W$29:$W$31,0))+SUM(IF( (ISNUMBER(SEARCH("Bench",$P$39:$U$41)))+(ISNUMBER(SEARCH("Press",$P$39:$U$41)));V39:V41*$W$39:$ W$41;0))

【问题讨论】:

  • FILTER()函数与MMULT()BYROW()VSTACK()一起使用可能会缩短您的长公式。显示一些示例数据和所需的输出。

标签: excel excel-formula office365


【解决方案1】:

我不认为这里有任何“简单”的储蓄。我所做的是以一种帮助我更好地可视化逻辑的方式“分解”一个极其复杂的公式。在这种情况下:

=SUM( IF( 
    (ISNUMBER( SEARCH( "Bench" , $P$9:$U$11 ) ) ) +
    (ISNUMBER( SEARCH( "Press" , $P$9:$U$11 ) ) ) ;
    V9:V11 * $W$9:$W$11 , 
    0 ) )

+SUM( IF(
    (ISNUMBER( SEARCH( "Bench" , $P$19:$U$21 ) ) ) +
    (ISNUMBER( SEARCH( "Press" ; $P$19:$U$21 ) ) ) ;
    V19:V21 * $W$19:$W$21 ;
    0 ) )

+SUM( IF(
    (ISNUMBER( SEARCH( "Bench" , $P$29:$U$31 ) ) ) +
    (ISNUMBER( SEARCH( "Press" , $P$29:$U$31 ) ) ) ;
    V29:V31 * $W$29:$W$31 ,
    0 ) )

+SUM( IF(
    (ISNUMBER( SEARCH( "Bench" , $P$39:$U$41 ) ) ) +
    (ISNUMBER( SEARCH( "Press" , $P$39:$U$41 ) ) ) ;
    V39:V41 * $W$39:$W$41;
    0 ) )

除了以一种让我看到模式的方式格式化它之外,我没有改变任何东西……而且我想研究模式,而不是细节。

我能看到的是这个公式在 6r x 3c 的 4 个范围内搜索“Bench”或“Press”的任何实例。如果至少有一个实例,则将 2 个 3 元数组相乘并对结果求和,否则返回该范围的零。

你有 O365,所以你能够在您的名称管理器中创建一个命名的 LAMBDA() 函数。例如,您可以在名称管理器中创建自定义 Excel 函数,例如:

=snorlaxFunction( "Bench", "Press", $P$39:$U$41 )

这会将 4 个术语中的每一个简化为:

+SUM( IF( snorlaxFunction( "Bench", "Press", $P$39:$U$41 ), 
    V39:V41 * $W$39:$W$41; 0 ) )

您可以更进一步,将整个 SUM(IF()) 封装为一个函数:

=snorlaxFunction( "Bench", "Press", $P$39:$U$41, V39:V41, $W$39:$W$41 )

在这种情况下,您的整个公式变为:

= snorlaxFunction( "Bench", "Press", $P$9:$U$11 , V9:V11 , $W$9:$W$11  ) +
  snorlaxFunction( "Bench", "Press", $P$19:$U$21, V19:V21, $W$19:$W$21 ) +
  snorlaxFunction( "Bench", "Press", $P$29:$U$31, V29:V31, $W$29:$W$31 ) +
  snorlaxFunction( "Bench", "Press", $P$39:$U$41, V39:V41, $W$39:$W$41 )

老实说,如果是我……我看不出有什么简单的方法可以缩短逻辑,而且我没有重复的术语适合 LET() 函数。所以我会按原样保留公式,但使用 alt enters 像我上面那样以大纲格式呈现公式。除非我要在电子表格中多次重复使用该公式,否则我不会为此创建命名的 LAMBDA()。

笔记

我注意到的一件事是您的符号在 comma 分隔文本和 semicolon 分隔文本之间漂移很多,正如您在上面看到的那样。我会坚持您配置的区域设置并保持 100% 一致,使用只要逗号或分号。

【讨论】:

    猜你喜欢
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多