如果在范围内有多个文本参数的语句

我正在尝试根据与它们配对的相邻(前一列)文本值来查找列中某些值的平均值。 以下面的例子为例,我想找出西海岸城市得分的平均值。 到目前为止,这是我得到的公式(根据例子,将被放置在C12)。 粗体部分代表我正在努力的部分。 也许整个公式是错误的?

=平均(如果( 在b3:b10中为“la”&“sf”&“sea”&“por” ),c3:c10))

在这里输入图像说明

不幸的是在Excel中没有WITHIN函数。 幸运的是我们可以使用数组函数的力量。

在数组上下文中

=IF($B$3:$B$10={"la","sf","sea","por"}, ...) 

将检查$ B $ 3的值是否等于“la”,则为真,等于“sf”,则为真等,如果$ B $ 4的值等于“la”,则为真,等于“ sf“,然后是true等等,直到$ B $ 10。

所以

 {=AVERAGE(IF($B$3:$B$10={"la","sf","sea","por"},$C$3:$C$10))} 

会做你想要的。

请注意,由于$ B $ 3:$ B $ 10是一个列向量,因此数组文字{“la”,“sf”,“sea”,“por”}必须是行向量。

公式必须是一个数组公式。 input没有大括号的公式,然后按[CTRL] + [Shift] + [Enter]结束。 花括号然后应该自动出现。

为了更加灵活,我会在我的例子中分别列出西海岸和东海岸的州。 注意,状态列表必须是行向量,因为$ B $ 3:$ B $ 10是列向量。 如果这是不可能的,则必须使用TRANSPOSE来转置它们。

在这里输入图像说明

要在数组上下文中的IF中有多个条件,我们必须注意,AND()/ OR()在数组上下文中大多不会像预期的那样工作。 为了避免这一点,我们可以使用以下技巧。 TRUE * TRUE的结果是1,但FALSE * TRUE的结果是0.所以乘以布尔值(比较的结果)可用于AND(所有布尔值必须为TRUE)。 TRUE + TRUE结果为2,FALSE + TRUE结果为1,但FALSE + FALSE结果为0.因此,可以使用布尔值(比较结果)的添加用于OR(至less一个布尔值必须为TRUE)。 我们应该记住,TRUE + TRUE = 2有时可能不是直接需要的结果。

所以以下将起作用: 在这里输入图像说明