|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 wangjguo44 于 2014-2-17 09:30 编辑
lijinmiles1974 发表于 2014-2-16 22:00
大师帮忙解释一下这个公式可否? - =SUMPRODUCT((表源!$C$2:$C$61=$A3)*(表源!$D$2:$D$61=B$2)*(表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2)*(MATCH(IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),)=ROW(表源!$1:$60)))
复制代码
1、应该说,公式的前几项(表源!$C$2:$C$61=$A3)*(表源!$D$2:$D$61=B$2)*(表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2)理解没多大问题,分别是渠道、地区、规模和“周”的条件,相乘后得到的是符合这三条件的为1,不合的为0;
2、关键是MATCH(IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),)=ROW(表源!$1:$60)——
a、因为你要的是不重复:“比如武汉市建行,只有一个网点7单,应该为1”,这个不重复,不是简单地只对A列网点去重复(按照去重原则,首次出现的留下来,再次出现的舍弃,如网点“中国建设银行湖北省三峡分行宜昌王家河支行”,若简单地去重复,在第一周出现了,保留,而到下面再出现,就不计了,这样第2周即使有这个网点也被排除在外,统计就不正确了,又如“农业银行湖北省武汉豹海分理处”,假定它在第1周没出现,而是第2周才首次出现,但首次出现时规模为0,这样当第2次出现,即使规模不为0,也已经被排除了,统计也就不正确了),而是要同时把规模及周的因素考虑进来(渠道和地区的信息已经包含在网点中),所以有IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),把去重复的数据(网点)限制在符合规模和周数条件的范围,在这个范围里去重复。
b、函数MATCH()可以返回单列(或单行)区域(或数组)中元素首次出现的位置序号,因此可以用MATCH()求得的位置号是否等于该元素实际所处位置号来判断是否是首次出现(相等是,不等非,所以就有MATCH(IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),)=ROW(表源!$1:$60)的判断;
3、把第1点和第2点相乘:(表源!$C$2:$C$61=$A3)*(表源!$D$2:$D$61=B$2)*(表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2)*(MATCH(IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),IF((表源!$B$2:$B$61>0)*(表源!$H$2:$H$61=2),表源!$A$2:$A$61),)=ROW(表源!$1:$60))就得到这样一个数组,符合条件的为1,不合的为0,再用SUMPRODUCT()求和,最终得到符合条件的个数。
|
评分
-
2
查看全部评分
-
|