如果频率是唯一的单元格,则求和

时间:2015-06-26 16:24:04

标签: excel unique frequency countif

我们在系统中接听电话,人们按下手机上的菜单键。

我们不想计算重复的电话。这个公式有效。

我们希望公式忽略少于60秒的调用。

我只希望在C列中的行是<60。

时运行该函数

这是我的功能:

=SUM(--(FREQUENCY(IF(($B$1:$B$94={"1,1"}),COUNTIF($A$1:$A$94,"<"&$A$1:$A$94),""),COUNTIF($A$1:$A$94,"<"&$A$1:$A$94))>0))

使用这样的数据:

       A           B      C
(888) 208-0980    1,1    479
(888) 208-0980    1,1    479
(888) 208-0980    1,1    60
(888) 208-0980    1,2    50
(888) 540-7272    1,4    10

以下是截图:

enter image description here

这是一个数组,所以当你复制它时,你需要按 Ctrl + Shift + Enter

该函数仅计算给定约束的数字的一个实例。我想添加另一个约束,如果C大于60.

1 个答案:

答案 0 :(得分:0)

好吧,这是一个公式,并且确实需要解构。

=COUNTIF($A$1:$A$94,"<"&$A$1:A$94)词组生成的长度为94的数组等于{0,1,2,...,93} 除外$A$1:$A$94中相应的电话号码与之前的号码重复(读取时)在列A)中,使用了第一次出现的相应数组值。因此,例如,数字&#34;(888)941-1960&#34;在A列的第11,12和13行中出现三次。第十一个数组元素对应于该数字的第一次出现(在A11中),其值为10.该值在数组的第十二和第十三个元素中重复,反映A12和A13中的重复值。数组中不同值的数量与$A$1:$A$94中不同电话号码的数量相匹配,我将PhoneIndex用作此数组的简写。

重写的IF部分为IF($B1:$B94={"1,1"},PhoneIndex,"")。这是一个长度为94的数组,它只是用零长度字符串替换PhoneIndex的元素,其中B列中的相应条目不是"1,1"。我将PhoneIndex2用作第二个数组的简写。

重写的FREQUENCY部分为FREQUENCY(PhoneIndex2, PhoneIndex)。 FREQUENCY函数的一个未记录的特性是,如果值在第二个参数(所谓的 Bins_array )中重复,则忽略重复项,并将Bins_array中的相应频率值设置为零。 PhoneIndex对应$A$1:$A$94中的所有电话号码(带有重复项),因此该功能提供第三个阵列(长度为94),其元素对应于$A$1:$A$94中的电话号码并且提供从该号码进行的呼叫次数的频率计数,其中1,1被按下阵列中对应于重复电话号码的任何元素的值都为零。我将此数组称为CallCount

公式的其余部分归结为{=SUM(--(CallCount>0))}。布尔比较将CallCount中的频率值数组转换为包含TrueFalse值的数组,具体取决于$A$1:$A$94中相应电话号码的来电是否为与列B中的"1,1"相关联。双重否定将布尔数组转换为1和0的数组,然后可以求和。它是布尔比较和双负,它确保将大于1的频率计数转换为值1以用于求和。这是在最终结果中排除重复调用的机制。

解构了这个公式之后,我现在转而修改它以排除少于60秒的通话。明显的出发点是IF部分。我的初步想法是修改它的第一个参数并使它像

AND($B$1:$B$94={"1,1"}, $C$1:$C$94>=60)

但是,虽然在语法上有效,但它提供的数组的元素全部为True或全部为False - 后者是最可能的结果。我将此作为练习让读者弄清楚为什么这两个观察都成立。

当然,真正需要的是组合两个布尔数组($B$1:$B$94={"1,1"}$C$1:$C$94>=60)以产生长度为94的数组,其中每个元素相当于正在执行的AND运算在每个输入数组的两个相应元素上。

一个解决方案是

1=((1*($B$1:$B$94={"1,1"}))*(1*($C$1:$C$94>=60)))

但毫无疑问还有其他人。 1*将每个布尔数组转换为1和0的数组(这是我在原始公式中用于执行相同转换的双重否定的首选替代方法工作)。这两个数组在相应的元素基础上相乘,得到一个&#34;产品数组&#34;长度94也包括1和0。然后通过True位将此数组转换回False1=元素的数组。生成的布尔数组有94个元素,由于它的构造方式,它的元素具有所需的属性。 (数学思想的读者会认识到这里被利用的同构在数组公式中用AND来解释Excel的行为。)

将上面的内容替换为原始公式中IF()函数的第一个参数应该可以解决问题。

最后一个观察结果:使用Excel的名称管理器可以简化很长的公式。在定义名称时使用公式是完全有效的,因此可以在名称管理器中定义PhoneIndex,如上所述。名称也可以在其定义中使用其他名称,因此提供了定义PhoneIndex2CallCount的简便方法。最终,电话公式可以更简洁地写成=SUM(--(CallCount>0))。明智地使用命名可以用来说明如何从单个元素构建复杂的公式,并且可以大大减轻理解公式的用途 - 在这种情况下公式需要更改时非常有用。 p>