计算未来价值的功能=) [英] Function to calcuute future values =)

查看:43
本文介绍了计算未来价值的功能=)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

伙计们,需要帮助我的函数,只需片刻...如果"Range"为空(单元格的值为"),请忽略它,因为我已经做完了计算我不知道如何更改以忽略这样的细胞.谢谢

guys, need help with my function, just one moment...if "Range" is null (Cell have value "") then ignore it, because i have alredy done it to count i dont know how to change for ignoring such cells. Thank you

Public Function future (ByVal r1 As Range, ByVal r2 As Range, ByVal r3 As Byte) As Variant  

    On Error GoTo errHandler

    If (r1.Columns.Count <> r2.Columns.Count Or r1.Rows.Count <> 1 Or r2.Rows.Count <> 1) Then
        future = "ERROR!"""
        Exit Function
    End If

    Dim denominatorSum As Double
    Dim numeratorSum As Double
    Dim denominator As Double

    Dim length As Integer

    length = r1.Columns.Count

    numeratorSum = 0
    denominatorSum = 0

    For i = 1 To length
        If i = length Then
            denominator = r2.Cells(1, length - i + 1)
        Else
            denominator = r2.Cells(1, length - i + 1) - r2.Cells(1, length - i) * r3
        End If
        numeratorSum = numeratorSum + (r1.Cells(1, i) * denominator)
        denominatorSum = denominatorSum + denominator
    Next i

    If denominatorSum = 0 Then
        future = "ERROR!"
        Exit Function
    End If

    future = numeratorSum / denominatorSum

    Exit Function

errHandler:

    future = "ERROR!"

End Function

推荐答案

尝试一下

Public Function future(ByVal r1 As Range, ByVal r2 As Range, ByVal r3 As Byte) As Variant

    On Error GoTo errHandler

    If (r1.Columns.Count <> r2.Columns.Count Or r1.Rows.Count <> 1 Or r2.Rows.Count <> 1) Then
        future = "ERROR!"""
        Exit Function
    End If

    Dim denominatorSum As Double
    Dim numeratorSum As Double
    Dim denominator As Double
    Dim i As Long, j As Long
    Dim length As Integer
    Dim used_r1 As Collection, used_r2 As Collection
    Dim rngCell As Range

    Set used_r1 = New Collection
    Set used_r2 = New Collection


        length = r1.Columns.Count

    'evaluate filled range and write to collection
    For j = 1 To length
        If Not (IsEmpty(r1.Cells(1, j))) And Not (IsEmpty(r2.Cells(1, j))) Then
            used_r1.Add r1.Cells(1, j).Value
            used_r2.Add r2.Cells(1, j).Value
        End If
    Next

    numeratorSum = 0
    denominatorSum = 0

    For i = 1 To used_r1.Count

        Debug.Print used_r1.Item(i)
        Debug.Print used_r2.Item(i)

        If i = used_r2.Count Then
            denominator = used_r2.Item(used_r2.Count - i + 1)
        Else
            denominator = used_r2.Item(used_r2.Count - i + 1) - used_r2.Item(used_r2.Count - i) * r3
        End If

        numeratorSum = numeratorSum + (used_r1.Item(i) * denominator)
        denominatorSum = denominatorSum + denominator

    Next i

    If denominatorSum = 0 Then
        future = "ERROR!"
        Exit Function
    End If

    future = numeratorSum / denominatorSum

    Exit Function

errHandler:

    future = "ERROR!"

End Function

这篇关于计算未来价值的功能=)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆