|
这个套路有点深,小妖姐姐不理解不出奇。不妨按我的理解先过一遍吧:
错位引用,应该是引用当前列的上一行以及其它列的同一行,计算后得到一个结果。
——也许伦家引用的是当前列的和其他列的任意一行呢?
——这种情况只有2种可能性:要么是两列的表头不一致,合并单元格之类导致的;要么就是同一列用了不同的公式。这两种可能在Access里都变成了不可能。如果考虑到这一层,Access输了。
说完定义,现在来看套路。以累计为例:
- Excel版本:将当前行数据(D6)与上一行结果(E5)进行合计。
- Access版本:Dsum可以视为:Dsum("数量","测试数据","ID="&[ID])+Dsum("数量","测试数据","ID<"&[ID])
前者相当于D6,后者相当于E5。
我们先来看Excel。E5怎么来的?SUM(D5,E4)→E4=SUM(D4,E3)→……E2=SUM(D2,E1),我们知道,E1是文本,表头,不参与计算,如此递推下去,E5=SUM(D1:D4)。
这不是就我们Dsum("数量","测试数据","ID<"&[ID])所表达的吗?Dsum("数量","测试数据","ID="&[ID])相当于D6应该不必赘述了吧?
Access版本里那个递推根本没见到嘛。事实上,在Access里这并不算什么。定义2个变量(例如i和j),预先将第一行的“数量”赋值给i,然后读取第一行的“数量”,如果等于i,k就不变,i不变;否则就增加1,i变为新的“数量”。如此一步步下去即可达到递推的目的。
但是这个写法较为复杂,所以Roy就取巧地使用记录的位置来处理。
|
|