编程语言应用

首页 » 常识 » 预防 » Excel模板开发时,函数公式引用有三招
TUhjnbcbe - 2024/7/29 17:37:00

在事务处理和数据分析中,时间都是重要的维度变量。销售报表里,我们希望在年、季度、月三个时间粒度上统计汇总销售额,此外还想在同一时间粒度上做些预测。为此,我们需要先制作出年、季度和月的维度信息来。

幸运的是,在Excel中,日期时间函数比较丰富,足以解决这一问题。阅读完本文,你将体会到综合应用查询函数VLOOKUP/LOOKUP、数组,以及名称管理器的好处。

首先,年和月的计算已有现成的公式,不过季度并没有。

我们只能另辟蹊径,考虑嵌套组合函数公式能否搞定。让我们首先思考下生成季度的思路:一年12个月,分为4个季度,而且这个分配是固定的。这一特性,使我们能够以查询的办法计算季度。

思路就体现在这里:因为月份可通过函数公式由日期直接得到,又因为月份与季度有固定对应关系,因此查询就能很好地解决此问题。思路确定。

在Excel的函数公式中,查询有三种方法:LOOKUP,VLOOKUP/HLOOKUP,INDEX+MATCH。这三种方法原理各异。解决我们当前的问题,应选择VLOOKUP,其次考虑LOOKUP。至于MATCH,它无法应用于我们稍后会用到的另一个数据对象:数组。

那为什么我们要优选VLOOKUP呢?原因仅仅是因为LOOKUP太古老了。现在甚至连Office官方都建议不要选它。那VLOOKUP就是查询的明星吗?很不幸,现在也不是了。最新的查询应该选择XLOOKUP,不过该函数只能在Excel版里看到,或者Microsoft也可以。估计大多数读者朋友目前还不是最新版,所以我们就用VLOOKUP。不过你需要了解的是,在本例中,LOOKUP完全没问题,甚至更好,因为参数少一些,相对简单。我们总喜欢简单又有效的解决方案,不是吗?

LOOKUP采用的算法是二分查找法,VLOOKUP则很可能是某种树查询。最后我会把LOOKUP和VLOOKUP的实现函数都写出来,供感兴趣的朋友参考。

写公式之前,我们还有一个细节需要处理。那就是查询的范围。我们可以在Excel制作一个映射表,但仅仅为了月份到季度的固定映射,这么做有点兴师动众。这里我们更好的做法应该是手工命名一个数组常量,然后直接引用它。

在公式选项卡下,选择名称菜单下的名称管理器,就可以新建一个命名的数组对象。我们把该数组命名为“季度”,然后按固定语法写下一个数组。数组语法就是大括号包裹一组由分号和逗号分隔的数字。其中每出现一个分号,表示新的一行。而一个逗号则分隔一行内的多列。月到季度的映射可看作12行2列的数组,所以数组常量写成了:

{1,1;2,1;3,1;4,2;5,2;6,2;7,3;8,3;9,3;10,4;11,4;12,4}

现在名称管理器多了一个叫作“季度”的数组对象,它可以直接在公式里引用。

我们利用表格的结构化引用写出了最终实现公式。它看起来很精练。现在是否体会到表格结构化引用的好处?

复用:编程的思想

把季度写在名称管理器里是很好的做法,因为我们可以重复使用它。在编程里,复用是很重要的思想原则:如果我们发现某些功能在重复出现,那么应该把它写成一个独立模块,然后引用。在Excel里做法完全一样。

现在我们知道,Excel中引用有三种:

对单元格引用,这可能是大家最常用的,但恰恰它不是最推荐的。

其次对表格引用。表格能够方便地引用结构化数据中的单列。既方便理解,引用操作也很简洁,是提倡的一种做法。

最后,名称管理器中的数据对象引用。它本质上和表格引用一样,但没有结构化。它更小、更灵活,最大程度体现了复用的思想,也是提倡的做法。

以后操作Excel,请多使用后两种引用方法吧,你会喜欢上它们的。

1
查看完整版本: Excel模板开发时,函数公式引用有三招