|
本帖最后由 roych 于 2011-3-5 23:57 编辑
尽管不多,Access里的函数还是够用的。如,Dlookup相当于Vlookup。但如果复杂些该怎么办?版友leejiner就提出来,如何在Access里开N次方?
Access里顶多只有一个开平方的。开任意次方怎么办呢?拿民国时期的话来说,拿就只能“曲线救国”了。
X开N次方,可以视为X的1/N次指数。Access里正好有个Exp内置函数。但是,请不要高兴得太早了。这可不是任意数,而是以自然对数为底的指数函数。
看到这里,是不是有些灰心了?别担心,我们还有Log函数,这个正是以e为底的对数函数。接下来,就是考验你高中数学有没有学好的时候了。答案是:表达式1:Exp(Log(X)/N)),这也是雷锋日里我做的第一件好事。O(∩_∩)O~推导过程以下链接:
http://www.office-cn.net/forum.php?mod=viewthread&tid=96327&page=1#pid585867
这是“曲线救国”的方针之一,这个是从编程思想的层面上来“曲线救国”,有些鲁迅先生弃医从文,用方块字来抗日救国的味道。那么还有没有第二种方法?答案是:有。例如,军援募捐,就是一种更为直接些(当然没有前线抗战那么直接)的“曲线救国”。
同样地,对于这个问题,我们也可以借助Excel强大的“军援”来武装我们的前线去“救国抗亡”。在Excel里,Power是一个开N次方的函数,我们可以在Access里使用这个函数,当然,前提是必须引用Excel库,就好比宋子文当年在美国军援,也要签些协议一样。
- Sub Power()
- Dim rst As New ADODB.Recordset
- Dim xcl As Object
- Set xcl = CreateObject("Excel.Application")
- rst.Open "select * from 主营收入", CurrentProject.Connection, 1, 3
- Do Until rst.EOF
- rst.Fields("主营收入3年复合增长09") = xcl.WorksheetFunction.Power(rst.Fields("主营收入09") / rst.Fields("主营收入06"), 1 / 3) - 1
- rst.MoveNext
- Loop
- rst.Close
- Set rst = Nothing
- Set xcl = Nothing
- End Sub
复制代码
进入VBE界面后按F5直接运行就可以执行了。附件里是加了一个函数,直接调用过来的。当然,有兴趣的朋友,也可以把这个函数改编成带参数的Function。
显然,这个自定义函数(准确点说,应该成为“过程”)比我们之前用的自定义表达式要复杂得多。不过,我为什么还要讲呢?主要在于想让大家知道,当Access函数不够用的时候,我们该如何去解决。
而我的忠告是,除非记录条数超过Excel的范围(或Excel里运行较慢),否则还是在Excel里做好了再导入Access来更新数据会更好些。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|