ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 787|回复: 3

[求助] VBA问题,有思路,但目前无法相互嵌套 ,求助坛友,蟹蟹。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-4 15:59 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 holly5125 于 2019-6-4 16:40 编辑

想用VBA实现在计息周期中计息金额变动的实时计息。(N个账户,每个账户在计息周期里有不确定的随时在变的计息金额)

我大概的思路构建如下:(混乱,请多多包函哇(┬_┬))

【日利率】=年利率/360=4.35%/360
【计息周期】=变动结束日-计息日+1(ps,这个是指每次变动金额的稳定结束日,内心OS:我也不造自己表达清楚了没,估计要参考着截图来)
【变动结束日】:
  如果交易日<=结息日,
        如果交易日<结息日,则变动结束日=交易日
        否则结束日=结息日
  否则循环结束结束。

X={各账户集合}  逐一计算每个子集下的利息
X=[1]
X=[N]        


如果交易日>=起息日,        
    如果第一个交易日=起息日,
      则结息=计息金额*计息周期
    否则
      如果F归集金额=0
        则计息金额=头寸+G请款金额
        结息=计息金额*计息周期
      否则计息金额=头寸+F归集金额
          结息=计息金额*计息周期
否则跳下个。

大概总结下,就是在季度结息的前提下把A集团账户下的N个账户分别算出各自的结息,在加总看集团总的利息。
因为这池子里的账户头寸是变动的,所以计息金额是变动的,在一个周期里计息是根据变动的头寸持续的天数来分段计息最后加总。
我思路有点混乱,把想法汇总不起来,然后能力又有限(此处悔恨莫及哭唧唧),想VBA下,请顺路的大佬帮帮忙给点建议指导哇,非常感谢。




补充内容 (2019-6-10 09:31):
我重新整理了下,参考VBA小白书自己写了代码,运行提示缺少数组,麻烦大家帮忙指导一下,谢谢。

截图可参考

截图可参考

样本.rar

8 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-10 09:31 | 显示全部楼层
Public Sub 实时计息()

Dim valuedate As Date          '定义日期起息日'
    valuedate = #3/21/2019#
Dim deadline As Date           '定义日期结息日'
    deadline = #6/20/2019#
Dim r As Double
    r = 0.0435
    dr = r / 360
   
Dim accuont As String                     '定义一个String文本,名称为account
    account = Range("B9:B838").Value       '将B9:B839中保存的数据储存到数组account中'
Dim tradate As Date                       '定义一个Date日期,名称为tradate
    tradate = Range("D9:D838").Value       '将D9:D839中保存的数据储存到数组tradate中'

Dim up As Currency
    up = Range("F9:F838").Value
Dim down As Currency
    down = Range("G9:G838").Value
Dim principle As Currency
    principle = Range("H9:H838").Value
Dim rsum As Currency
    rsum = Range("H9:H838").Value           '定义数组,等返回值'
Dim i As Variant

For Each i In account
  Do While account(i) = account(i + 1)
  
      If tradate(i) >= valuedate Then
        If i = 0 Then
           rperiod(0) = tradate(0) - valuedate + 1
           rsum(0) = dr * rperiod * (principle(0) - up(0) + down(0)) '求出起息日至第一次头寸变动期间的利息'
        ElseIf 0 < i < n Then
              rperiod(i) = tradate(i + 1) - tradate(i) + 1
              rsum(i) = dr * rperiod(i) * principle(i)
        ElseIf i = n Then
           rperiod(n) = desdline - tradate(n) + 1
           rsum(n) = dr * rperiod(n) * principle(n)
        End If
      End If
       i = i + 1

  Loop
Next i
End If



End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-10 09:44 | 显示全部楼层
本帖最后由 holly5125 于 2019-6-10 09:45 编辑

Public Sub 实时计息()

Dim valuedate As Date          '定义日期起息日'
    valuedate = #3/21/2019#
Dim deadline As Date           '定义日期结息日'
    deadline = #6/20/2019#
Dim r As Double
    r = 0.0435
    dr = r / 360
   
Dim accuont As String                     '定义一个String文本,名称为account
    account = Range("B9:B838").Value       '将B9:B839中保存的数据储存到数组account中'
Dim tradate As Date                       '定义一个Date日期,名称为tradate
    tradate = Range("D9:D838").Value       '将D9:D839中保存的数据储存到数组tradate中'

Dim up As Currency
    up = Range("F9:F838").Value
Dim down As Currency
    down = Range("G9:G838").Value
Dim principle As Currency
    principle = Range("H9:H838").Value
Dim rsum As Currency
    rsum = Range("H9:H838").Value           '定义数组,等返回值'
Dim i As Variant

For Each i In account
  Do While account(i) = account(i + 1)
  
      If tradate(i) >= valuedate Then
        If i = 0 Then
           rperiod(0) = tradate(0) - valuedate + 1
           rsum(0) = dr * rperiod * (principle(0) - up(0) + down(0)) '求出起息日至第一次头寸变动期间的利息'
        ElseIf 0 < i < n Then
              rperiod(i) = tradate(i + 1) - tradate(i) + 1
              rsum(i) = dr * rperiod(i) * principle(i)
        ElseIf i = n Then
           rperiod(n) = desdline - tradate(n) + 1
           rsum(n) = dr * rperiod(n) * principle(n)
        End If
      End If
       i = i + 1

  Loop
Next i
End If

End Sub

cK.PNG

TA的精华主题

TA的得分主题

发表于 2019-6-12 07:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
没看懂说明,  变动理解不清楚
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-27 06:46 , Processed in 0.038476 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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