设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[窗体] 关于自动计息的问题

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-6 23:25:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


已知投资者的存取款记录,包括金额,存款时间和取款时间。而利率随时变化。为了分段计息,就要考虑其存款持续时间在整个利率变化期间的关系。

首次存入时,向过去寻找的第一条利率记录,作为开始的利率。然后从存款时间往后,碰到调息时,按照新利率计算,以此类推。当取款时,则向过去寻找第一条利率记录。这是个多次的分段计算过程。

姓名        存款类型        金额        存入时间        支取时间        应付利息
高飞        1个月        30000        2011-9-1        2011-10-1       
高飞        活期        2000        2011-9-2        2011-10-1       
mike        活期        3000        2011-8-20 2011-10-1       

存款种类        调整前利率        调整后利率        调整时间        调整原因
活期        .02        .025        2011-8-1        cpi走高,已请示领导。
活期        .025        .022        2011-8-30        收益下调
活期        .022        .06        2011-9-16       
活期        .06        .014        2011-9-29       
活期        .014        .012        2011-10-5       
1个月                .04        2011-8-1       
1个月        .04        .0415        2011-9-16       

从数学可知,活期存款类别下,高飞的利息=余额2000元*【(9月2日-8月30日)*8月30日的利率+(9月16日-9月2日)*9月16日的利率+(9月29日-9月16日)*9月29日的利率+(10月1日-9月29日)*9月29日的利率】/365

如何用代码实现上述功能?按照活期和一个月的类别分别列示?
用查询做起来似乎很困难,必须在窗体中用vba代码才行。但还是没搞出来。

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-9-7 11:29:37 | 只看该作者
可写一个自定义函数计算应付利息。
3#
 楼主| 发表于 2011-9-12 22:05:08 | 只看该作者
Public Function paymoney(N1, n2, n3) As Currency
'n1为该笔认购的到账时间,n2为本开放日即查询日,n3为本次赎回的份额
Dim rs1 As Recordset
Dim rs As Recordset
'Dim 累计收益 As Currency

Set rs1 = CurrentDb.OpenRecordset("select * from [8-1受益权收益率调整记录] where 受益权类型 like '活期'")
rs1.Sort = "调整日期 ASC"
Set rs = rs1.OpenRecordset '要中转一次后才能让排序生效,要据此计算出利息分段区间

'将持有期分解为每一天,截止日可以是当日,也可以是赎回日
d1 = Round(CDate(n2) - N1 + 1, 0)
d2 = N1 - 1 '到帐时间
累计收益 = 0

For i = 1 To d1
d2 = d2 + 1 '第一条记录为到帐时间

rs.MoveFirst '移动到收益率记录的最早一条记录
t = rs.RecordCount '统计出利率调整的段数

   For i1 = 1 To (t - 1) '从利息表中取出两个相邻的收益率,组成段,循环判断每一天是否在本段内,t条记录,移动t-1次即到尾
    t1 = rs.Fields(4) '某时间段的起点
    rs.MoveNext
    t2 = rs.Fields(4) '某时间段的终点

    If d2 >= t1 And d2 < t2 Then
    该日有效收益率 = rs.Fields(2)
    Else: If d2 >= t2 Then 该日有效收益率 = rs.Fields(3)
     当日收益 = (n3 * 该日有效收益率 / 365)

    End If

   Next i1
   
   ' MsgBox ("本日为" & d2 & "," & "收益率是" & 该日有效收益率 & "当日收益是" & 当日收益)
    累计收益 = 当日收益 + 累计收益
    Next i
   
   ' MsgBox ("累计收益是" & 累计收益)
paymoney = 累计收益
4#
 楼主| 发表于 2011-9-12 22:25:34 | 只看该作者
经过几天努力,终于成功了,呵呵。注意上面的函数用了3个参数,其实还隐含了2个参数,一个是存款类型,一个是存款利率变化表的名字。这两个参数我当做常量来处理了。
如果碰到利率调整日,当日的利息按照当日生效的利率计算。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 07:00 , Processed in 0.102839 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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