首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每月债券的息票日期- excel

每月债券的息票日期- excel
EN

Stack Overflow用户
提问于 2016-05-06 10:00:26
回答 2查看 1.3K关注 0票数 0

我试图计算债券的所有现金流日期,债券的频率日期是每月。对于其他频率,我通常使用COUPNCD。我试着使用=EDATE(到期日;-1),但是日期不正确,因为它没有考虑支付优惠券的方式,总是在同一天,除非它不存在。

示例:

结算日期: 31-12-2014;到期日: 30-05-2016;基准:2(实际/360);频率:4

使用=COUPNCD计算息票日期,我得到现金流的下列日期:

28-02-2015 30-05-2015 30-08-2015 30-11-2015 29-02-2016 30-05-2016

如果我计算with =EDATE(日期;-3),我得到:

28-02-2015 30-05-2015 30-08-2015 29-11-2015 29-02-2016 30-05-2016

你有什么办法能帮到我吗?

谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-25 22:47:18

对于函数COUPNCDCOUPNUM,我也遇到了同样的问题--不能使用12 (用于每月支付)作为频率属性。

有一种方法-您可以编写以下用户定义的函数。我现在在我的金融模型中使用它,它运行得很完美。

代码语言:javascript
复制
Option Explicit
Public Function DC_CoupNum(Settlement As Date, Maturity As Date, NumberOfPayments As Integer) As Integer
    Dim NewDate As Date
    Dim i As Integer
    Dim r As Integer
    Select Case NumberOfPayments

        Case 1
            r = 12
        Case 2
            r = 6
        Case 4
            r = 3
        Case 12
            r = 1
    End Select

    NewDate = Maturity
    i = 0
    Do While NewDate > Settlement
        i = i + 1
        NewDate = Application.WorksheetFunction.EDate(NewDate, -1 * r)
'        Debug.Print NewDate
    Loop
    DC_CoupNum = i

End Function
Public Function DC_CoupNcd(Settlement As Date, Maturity As Date, Frequency As Integer, Optional NextC As Boolean = True) As Date
    'next coupon date after the settlement date

    'NextC = True ... next coupon date
    'NextC = False ... previous coupon date
    Dim m, o

    Select Case Frequency

        Case 1
            m = 12
        Case 2
            m = 6
        Case 4
            m = 3
        Case 12
            m = 1
    End Select

    o = DC_CoupNum(Settlement, Maturity, Frequency) - 1

    If NextC = False Then o = o + 1


    If Maturity = WorksheetFunction.EoMonth(Maturity, 0) Then 'pokud je Maturity konec mesice
        DC_CoupNcd = Application.WorksheetFunction.EoMonth(Maturity, -o * m)
    Else
        DC_CoupNcd = Application.WorksheetFunction.EDate(Maturity, -o * m)
    End If

End Function
票数 1
EN

Stack Overflow用户

发布于 2016-05-06 13:53:07

我不能复制你的EDATE()结果。使用下面的公式,我得到了与COUPNCD()函数完全相同的值:

代码语言:javascript
复制
=EDATE(maturity;0)    ==>  30-05-2016
=EDATE(maturity;-3)   ==>  29-02-2016
=EDATE(maturity;-6)   ==>  30-11-2015
=EDATE(maturity;-9)   ==>  30-08-2015
=EDATE(maturity;-12)  ==>  30-05-2015
=EDATE(maturity;-15)  ==>  28-02-2015

( maturity为30-05-2016)

如上文所示,请检查是否为EDATE()函数使用了正确的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37069518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档