首页 > 解决方案 > 如何将计算分配给函数

问题描述

我正在尝试创建一个 UDF 以最小化计算中的数据行。而不是包括特定单元格引用的规定计算,我想创建一个名为 Rent_Rate 的变量并将其设置为等于 Base_year_rent * ((1 + Rent_escalator)^Compound_period) 以便电子表格中的公式显示为“= Rent_Rate * Units (静态单元格引用)”

我尝试定义变量并将每个变量设置为我想要(在单独的工作表上)引用的参考单元格。

Public Function Rent_Rate(Base_year_rent As Long, Rent_escalator As Long, Compound_period As Long, Rent_Rate As Long) As Long

    Base_year_rent = SH_Assumptions.Cells("C11")
    Rent_escalator = SH_Assumptions.Cells("C12")
    Compound_period = Year(Range(ActiveCell, ActiveCell.End(xlUp)).Select) - Year(SH_Assumptions.Cells("C4"))

    Rent_Rate = Base_year_rent * ((1 + Rent_escalator) ^ Compound_period)

End Function

我希望输出是一个特定值,等于输入到被引用单元格中的值。

标签: excelvbafunction

解决方案


首先 - Excel 中的函数需要有括号,例如=Rent_Rate()

可以通过使用您想要的名称设置一个命名范围来绕过它,这会调用您的 UDF(例如,一个名为RentRatewhich is的命名范围=Rent_Rate()

下一个问题是您提供了 UDF 3 参数,但没有向它们传递任何内容。事实上,您会立即覆盖它们 - 只是Dim变量!

Public Function Rent_Rate() AS Long
    Dim Base_year_rent As Long, Rent_escalator As Long, Compound_period As Long, Rent_Rate As Long

    Base_year_rent = SH_Assumptions.Cells("C11").Value
    Rent_escalator = SH_Assumptions.Cells("C12").Value

    'What is this abomination supposed to do???
    Compound_period = Year(Range(ActiveCell, ActiveCell.End(xlUp)).Select) - Year(SH_Assumptions.Cells("C4"))

    Rent_Rate = Base_year_rent * ((1 + Rent_escalator) ^ Compound_period)

End Function

但是,您在这里仍然有一个大问题-您为什么要使用ActiveCelland Select 特别是在 UDF 中,您应该避免使用Select. 如果您尝试使用调用该函数的单元格,请查找Application.Caller


推荐阅读