我有一个大型Excel电子表格。它包括许多运行各种查找功能的数据表。为了简化版本控制,我目前正在将这些数据表拉出到单独的.csv文件中,因此它们可以正确地进行区分。不幸的是,它们包含一些公式,当我将文件转换为静态.csv时,它显然无法正常工作。
我目前的解决方案是,在计算不可避免的任何地方,将计算移动到主工作簿中的自己的单元格并命名单元格。我们称之为ExampleCalc
。然后,在计算所在的数据表的单元格中,我改为输入ref:ExampleCalc
。然后进行查找,我编写了以下UDF:
Function RaceLookup(lookupString As Variant, lookupTable As Range, raceID As Range, cleanIt As Boolean) As Variant
' Helper function to make the interface formulae neater
Dim temp As Variant
Dim temp2 As String
Dim inpString As Variant
Dim id As Double
id = raceID.Value
If TypeOf lookupString Is Range Then
inpString = lookupString.Value
Else
inpString = lookupString
End If
With Application.WorksheetFunction
temp = .Index(lookupTable, id, .Match(inpString, .Index(lookupTable, 1, 0), 0))
If Left(temp, 4) = "ref:" Then
temp2 = Right(temp, Len(temp) - 4)
temp = Range(temp2).Value
End If
If cleanIt Then
temp = .clean(temp)
End If
End With
RaceLookup = temp
End Function
这会对数据表进行标准INDEX
查找。如果它找到的条目不以ref:
开头,则只返回它。如果确实以ref:
开头,则会删除ref:
并将剩余的内容视为单元格名称引用。因此,如果INDEX
返回的值为ref:ExampleCalc
,则它将返回ExampleCalc
单元格的内容。
问题是ExampleCalc
没有添加到依赖关系树。这意味着如果ExampleCalc
的值发生更改,则检索到的值不会更新。有没有办法让函数添加ExampleCalc
到单元格的依赖树?或者,是否有更明智的方法来做到这一点?
答案 0 :(得分:2)
我找到的解决方案是添加行
Application.Volatile True ' this causes excel to know that if the function changes, it should re calculate. You will still need to click "Calculate Now"
进入功能。但是,正如我的代码注释所示,如果唯一的更改是在功能输出中,则您必须手动触发重新计算。
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/office/ff195441.aspx。