我不认为这里有任何“简单”的储蓄。我所做的是以一种帮助我更好地可视化逻辑的方式“分解”一个极其复杂的公式。在这种情况下:
=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% 一致,使用只要逗号或分号。