3 要学会转换思路
前面的案例,通过阅读表格,绘制逻辑思维流程图,来寻找解决方案。当表格的逻辑弄清楚了后,最终的解决方案其实是很简单的。
但是,在有些情况下,直接求解不见得是一个好思路。比如“任务2:如何分析指定月份下,各个产品的累计销售对比?”,这个问题,如果你想一步到位,用一个公式来解决,可就有麻烦了。
所谓分析指定月份下的累计数,实际上是要计算指定个数的单元格区域的合计,这样就需要使用OFFSET来获取这样的动态单元格区域。
但是我们是要对各个产品进行求和,而每个地区都有该产品,这样要加的区域就是4个单元格个数不定的区域了(因为现在的表格是4个地区)。当然,可以使用4个OFFSET这样的函数相加,但是,如果有20个地区呢?如果有100个地区呢?
如果你对数学中的矩阵计算比较熟悉,那么就可以使用一个公式来解决,不过这里也需要使用INDIRECT来构建动态区域了。此时的公式如下(是数组公式,参考下图,注意:由于使用矩阵函数MMULT,因此需要清楚矩阵乘法计算的规则),具体公式的逻辑就不再介绍了:
=SUMPRODUCT( MMULT(TRANSPOSE((源数据!$B$2:$B$25=B6)*1),
INDIRECT("源数据!R2C3:R25C"&MATCH($C$3,源数据!$A$1:$N$1,0),FALSE)))

相信大部分人第一眼看到这个公式后的第一感觉是头晕。确实,没有扎实的函数基础和数学基础,是无法理解这样的公式的。
既然这个思路太难了,不妨换一个角度来考虑:直接计算所有地区的每个产品总计不方便,那么,能否先把每个地区的每个产品的合计数算出来,然后将所有地区的数据求和,不就可以了吗?
计算每个地区每个产品的合计数就比较简单了:先用MATCH函数定位地区位置,用MATCH函数定位产品位置,再用MATCH函数定位月份位置,然后用OFFSET函数偏移来获取每个地区每个产品的求和区域,最后用SUM函数求和,即可大功告成!效果如下图所示。
其中,单元格C6公式为:
=SUM(OFFSET(源数据!$C$1,MATCH(C$5,源数据!$A$2:$A$25,0)+MATCH($B6,源数据!$B$2:$B$7,0)-1,,,MATCH($C$3,源数据!$C$1:$N$1,0)))
单元格G6公式为:
=SUM(C6:F6)


(未完待续,请看下篇文章)

Excel学习和应用系列讲座历史文章

