设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 6402|回复: 12
打印 上一主题 下一主题

Excel挑战Access第二十三期:错位引用

[复制链接]
1#
发表于 2016-5-4 12:32:31 | 显示全部楼层
先来个简单点的:
额,报表版本嘛,前面一期已经让小妖姐姐做视频起码花了7分钟,就不求她的心理阴影面积了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
2#
发表于 2016-5-5 04:58:49 | 显示全部楼层
pureshadow 发表于 2016-5-4 18:12
你们都错误理解我的意思了,我既不是要实现累加,也不是要实现中式排名,只不过用这两个例子来实现错位引用 ...

这个套路有点深,小妖姐姐不理解不出奇。不妨按我的理解先过一遍吧:

错位引用,应该是引用当前列的上一行以及其它列的同一行,计算后得到一个结果。
——也许伦家引用的是当前列的和其他列的任意一行呢?
——这种情况只有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就取巧地使用记录的位置来处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-5 10:25 , Processed in 0.079836 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表