在 Excel 中根据条件应用函数

在 Excel 中根据条件应用函数

假设我在列中有A一个整数列表,我想在 中对它们求和B1。那么我可以简单地写=SUM(A:A)。假设我想要小于 10 的整数之和,那么我可以写SUMIF(A:A,"<=10")。如果我现在想对以下整数求和,该怎么办?完全平方

我总是可以在第一个单元格 ( )C中创建一个列,然后依此类推。然后我可能可以写入类似 的内容,然后继续隐藏丑陋的列。C1=INT(SQRT(A1))=SQRT(A1)=INT(SQRT(A2))=SQRT(A2)B1SUMIF(C:C,"TRUE",A:A)C

但有没有更简单、更简洁的方法来做到这一点?我似乎找不到在标准中应用函数的方法。例如,如果@x占位符名称(一个变量)表示应用该标准的值,我可以写"@x<=10""<=10",但更有用的是,我可以"INT(SQRT(@x))=SQRT(@x)"直接写,而不是C像以前那样创建一个列。那么我的问题是,

是否有一种简单的方法来创建这样有用的标准?

答案1

没有辅助列:

=SUMPRODUCT((A:A)*(INT(SQRT(A:A))^2=A:A))

在此处输入图片描述

笔记:

  1. SUMPRODUCT由于数组在内部生成,因此不需要数组公式。
  2. 为了更有效率,范围应该限制在包含数据的实际单元格内;例如:A1:A99

答案2

您可以使用通过 Ctrl+Shift+Enter 输入的特殊公式

它们被称为数组公式并在图括号中查找(由 Excel 添加):

{ =SUM( IF( INT(SQRT(A1:A100))=SQRT(A1:A100); A1:A100; 0 ) ) }

如您所见,这些公式允许计算任何自定义表达式并对任何其他表达式求和,例如:

{ =SUM( IF( INT(SQRT(A1:A100))=SQRT(A1:A100); B1:B100; C101:C200 ) ) }

小提示:我记得(我很多年前就用过这些公式)它们不适用于以下间隔答:所以我不得不使用A1:A16384使用整个列

目前我无法检查(因为 Linux 和 Libre Office 尚未实现),但微软可能已经改进了这一点,并允许使用简单的无限间隔,如答:

官方手册:https://support.office.com/en-us/article/guidelines-and-examples-of-array-formulas-7d94a64e-3ff3-4686-9372-ecfd5caa57c7

此外:https://www.vertex42.com/blog/excel-formulas/array-formula-examples.html

答案3

如果有新的动态数组公式,我们可以使用过滤器和窃取@Gary'sStudents 检查:

=SUM(FILTER(A:A,INT(SQRT(A:A))^2=A:A))

在此处输入图片描述

相关内容