我已经绞尽脑汁2天了解我为什么不能这样做,所以经过多年的搜索,我发布了第一个问题。
我将公式存储在工作簿的表中。该表名为Adjustments。在同一工作簿中的另一个工作表中,我根据贷款编号查找公式。在我复制工作表并将其另存为单独的文档之前,我想用查找的公式替换查找公式,并将其保留为活动公式,而不仅仅是它计算的值。
目前在单元格E6中的查找公式是: =(INDEX(调整,MATCH(Loan_No,调整[贷款号],0),COLUMN(调整[GPR Adj])))
引用的公式是:
= IF(AND(COM_GPR_ACT<> 0,OR([@ [Vacancy Assumption]] + COM_OCC_ACT< = 100%,IFERROR(((COM_VAC_RPTD / COM_GPR_RPTD)> [@ [Vacancy Assumption]]),FALSE ))),0,(COM_RENTS_ACT * COM_NRSF-COM_GPR_ACT))
我想将索引/匹配公式替换为它正在查找的单元格中的公式。
以下是我尝试使用的代码。
Dim GPR As String
GPR = [INDEX(Adjustments,MATCH(Loan_No,Adjustments[Loan No],0),COLUMN(Adjustments[GPR Adj]))].Formula
Range("E6").Formula = GPR
当我使用它时,我得到运行时错误' 1004':应用程序定义或对象定义错误。
我已经尝试将评估应用程序更改为.Value但是这给了我两个公式的最终值。似乎如果我有Excel 2013,我可以使用[FormulaText(GPR)]。
我正在努力避免复制和粘贴公式,因为我想要替换大约25个单元格而且我不想减慢宏,因为这只是运行的几个子单元中的一个。它似乎应该是一个简单的答案,但我还没有发现它。任何帮助表示赞赏!
答案 0 :(得分:2)
如果它是单元格E6中的有效公式,这应该有效,所以我怀疑公式存在问题。
可能错误的是您正在使用不合格的结构化表格引用,如[@ [Vacancy Instruction]] - 尝试使用表名为它们添加前缀。
答案 1 :(得分:1)
好的,那里有非常时髦的要求。一种方法是执行以下操作。
现在您已经定义了一个相对名称,该名称始终指向使用其中的单元格左侧的单元格!放弃时髦。花一些时间来吸收它。
现在你可以写这样的公式了
=ADDRESS(ROW(ToMyLeft),COLUMN(ToMyLeft))
这将给出左边的单元格地址,这是一个单元格地址。因此,当在单元格F7中执行时,返回$ F $ 6。这应该给你一个最终公式的家的钩子。你仍然需要一些VBA函数来执行它,例如。
Option Explicit
Function FunkyIndirectFunctionEval(ByVal sCellAddress As String)
Dim ws As Excel.Worksheet
Set ws = ActiveSheet '<--- if you workbook spans several sheets you'll need to handle the sheets, second param?
Dim rng As Excel.Range
Set rng = ws.Range(sCellAddress)
Dim vEval As Variant
FunkyIndirectFunctionEval = Application.Evaluate(rng.Formula)
End Function
但这会产生公式背景问题,因为人们正在从其上下文中剥离公式。我没试过这个,我说成功的几率是25%!
不要忘记在选项对话框中将RC参考更改回A1参考。