在Excel中计算回收价值

在Excel中计算回收价值,excel,finance,Excel,Finance,我有一组值,如下所示: (9888000)(88410205)(76030786)(62712494)(48416610)(33102893)(16729517)746979 19371753 39191722 43755624 66114081 89819671 114926989 141492724 每个值表示特定年份的某个金额。e、 g.(16729517)是第7年的现金流出 现在我在另一个牢房里有110000000美元作为第一笔付款 现在我尝试计算初始付款的投资回收年。对我来说,回收期应

我有一组值,如下所示:

(9888000)(88410205)(76030786)(62712494)(48416610)(33102893)(16729517)746979 19371753 39191722 43755624 66114081 89819671 114926989 141492724

每个值表示特定年份的某个金额。e、 g.(16729517)是第7年的现金流出

现在我在另一个牢房里有110000000美元作为第一笔付款

现在我尝试计算初始付款的投资回收年。对我来说,回收期应为:7.96,因为在该年,金额变为正值

但是我无法计算这个7.96的值。有人能帮忙吗

我已经通过间接方法完成了:

作为第一步,我检查每列中的值,并根据正值和负值存储true或false

第二步:
=匹配(真,完整数组,0)
。这给了我8作为数字,在这里它找到第一个正值

然后,作为第三步,我使用以下公式:

=Year-OFFSET(CFC,0,Year)/OFFSET(Investment,0,Year) . 
在本例中,我在第2步中得到的是年份。CFC单元为空(0年累计现金流)。输出7.96,这是我的要求值


但这是一种漫长而间接的方式。对于所有这些计算,我想要一个单行公式。

你的公式方法似乎很自然。我不确定你能做得比你现在做的更好,尽管我确信数组公式大师可以找到一种方法将其全部封装到一个单一的公式中,尽管不太可读

使用VBA,您可以编写一个可以直接从电子表格调用的函数。在标准代码模块中,输入:

Function PayBack(R As Range) As Variant
    'R is a range, assumed to be 1-dimensional
    'consisting of negative numbers which
    'at some point transition to positive
    'returns the cross-over point

    Dim i As Long, n As Long
    Dim x As Double, y As Double

    n = R.Cells.Count
    x = R.Cells(1).Value
    If x >= 0 Then
        PayBack = CVErr(xlErrNA)
        Exit Function
    End If

    'x < 0 in the following loop:

    For i = 2 To n
        y = R.Cells(i).Value
        If y >= 0 Then
            x = Abs(x)
            PayBack = i - y / (x + y)
            Exit Function
        End If
        x = y
    Next i
    'if the code reaches here -- still negative, so return error
    PayBack = CVErr(xlErrNA)
End Function

它会按预期进行计算。如果数据中没有从负到正的转换,它将返回
#N/A
错误,当然可以通过各种方式进行调整。

您可以将公式组合成一行。下面是对您所做操作的一个细微变化,这是零上和零下值之间的直线外推:

=FORECAST(0,{-1,0},
OFFSET(CashFlows,,MATCH(TRUE,CashFlows>0,0)-2,1,2))
+MATCH(TRUE,CashFlows>0,0)
如果
现金流
范围在一列而不是一行中,则可能需要更改抵销公式。按下
ctrl+shift键,同时点击
enter


编辑此公式忽略第一个现金流,无论是正现金流还是负现金流。如果要包含它,请将
运算符更改为
=
,然后测试是否有错误。

向我们展示您是如何尝试解决此问题的,以及在哪里遇到问题的。RON“我是通过间接方法完成的:在问题中添加这些信息并用公式描述你的方法。这看起来像是一个简单的插值问题。。。我已经通过间接方法完成了:作为第一步,我检查每列中的值,并根据正值和负值存储true或false。然后我使用这个公式:=MATCH(TRUE,完整数组,0)。这给了我8作为数字,在这里它找到第一个正值。然后,作为第三步,我使用这个公式:=年抵消(CFC,0,年)/抵消(投资,0,年)。在本例中,我在第2步中得到的是年份。CFC单元为空(0年累计现金流)。但这是一种漫长而间接的方式。我想为所有这些计算提供一个单行公式。您考虑过VBA解决方案吗?当我尝试使用:MATCH(TRUE,现金流>0,0)时,我得到“N/a”。这只是公式的一部分。但你是按照我在回答中写的那样输入的吗?在按住ctrl+shift键的同时按enter键?如果您观察公式栏中的公式,Excel是否在其周围添加了大括号
{…}
?(不是你说的)事实上,我对完整的公式有相同的结果“N/A”,然后我试着分部分做。而且我在公式栏中没有看到任何{…}。。。。作为参考,我已将文件以“20”的名称上载到:第1页。让我第三次尝试:在按住
CTRL+SHIFT
的同时按
ENTER
输入公式。如果操作正确,您将在公式栏中的公式周围看到
{…}
。在公式栏中获得{…}…但结果相同…'N/a'
=FORECAST(0,{-1,0},
OFFSET(CashFlows,,MATCH(TRUE,CashFlows>0,0)-2,1,2))
+MATCH(TRUE,CashFlows>0,0)