# WorksheetFunction.Xirr

返回一组现金流的内部收益率，这些现金流不一定定期发生。若要计算一组定期现金流的内部收益率，请使用函数 IRR。



## 语法

express.**Xirr(Arg1, Arg2, Arg3)**

express   一个代表 **WorksheetFunction** 对象的变量。

## 参数

| **名称** | **必选/可选** | **数据类型** | **说明** |
| :------ | :------------ | :---------- | :------- |
| Arg1 | 必选 | any | Values - 与 dates 中的付款计划对应的一系列现金流。第一个付款是可选的，与投资开始时的成本或付款对应。第一个值如果是成本或付款，就必须是负值。所有后续付款都基于 365 天/年贴现。这一系列值中必须至少包含一个正值和一个负值。 |
| Arg2 | 必选 | any | Dates - 与现金流付款对应的付款日期计划。第一个付款日期表示付款计划的开始。所有其他日期都必须晚于此日期，但相互顺序是任意的。日期应使用 DATE 函数输入，或者作为其他公式或函数的结果输入。例如，使用 DATE(2008,5,23) 输入 2008 年 5 月 23 日。如果日期以文本形式输入，将会出现问题。 |
| Arg3 | 可选 | any | Guess - 一个据您推测是接近 XIRR 结果的数字。 |

## 返回值

Double

## 说明


* ET 以序数形式存储日期以使其可用于计算。默认情况下，1900 年 1 月 1 日的序数是 1；2008 年 1 月 1 日的序数是 39448，因为该日期距 1900 年 1 月 1 日有 39,448 天。
* dates 中的数字将被截尾取整。
* XIRR 要求至少有一个正现金流和一个负现金流，否则 XIRR 将返回错误值 #NUM!。
* 如果 dates 中的任一数字不是有效日期，XIRR 将返回错误值 #VALUE。
* 如果 dates 中的任一数字早于开始日期，XIRR 将返回错误值 #NUM!。
* 如果 values 和 dates 所含的值的个数不同，XIRR 将返回错误值 #NUM!。
* 多数情况下，不需要为 XIRR 的计算提供 guess 值。guess 的值在省略时假定为 0.1 (10％)。
* XIRR 与净现值函数 XNPV 密切相关。XIRR 计算的收益率是 XNPV = 0 时的利率。
* ET 使用迭代技术计算 XIRR。XIRR 使用不断修正的收益率（从 guess 开始）循环执行计算，直到结果的精度达到 0.000001% 以内为止。如果 XIRR 执行了 100 次循环后还是找不到结果，则将返回错误值 #NUM!。



## 示例


```JavaScript
/*本示例演示计算一组现金流的内部收益率，并将结果赋值到A5单元格*/
function test() {
    let dts = [-1000, 2000, 2400, 2880]
    let dats = ["2022/09/10", "2022/10/10", "2023/11/10", "2023/12/10"]
    Range("A5").Value2 = WorksheetFunction.Xirr(dts, dats, 11)
}
```


```JavaScript
/*本示例演示为A1等单元格分别赋值，用 Xirr 计算一组现金流的内部收益率，这些现金流不一定定期发生。*/
function test() {
    Range("A1").Value2 = -1000
    Range("A2").Value2 = 2000
    Range("A3").Value2 = 3000
    Range("B1").Value2 = "2021/09/10"
    Range("B2").Value2 = "2023/09/30"
    Range("B3").Value2 = "2024/11/14"
    alert(WorksheetFunction.Xirr(Range("A1:A3"), Range("B1:B3")))
}
```
