将 Excel 公式分解为仅依赖不引用其他单元格的单元格的公式
Posted
技术标签:
【中文标题】将 Excel 公式分解为仅依赖不引用其他单元格的单元格的公式【英文标题】:Explode an Excel formula into a formula that relies only on cells that don't refer to other cells 【发布时间】:2015-07-29 01:37:11 【问题描述】:我正在寻找一种方法将 excel 公式解压缩为仅依赖于不引用其他单元格的单元格的公式。
示例:在下面的电子表格中,单元格 A1 包含公式“B1 + B2”。同时,单元格 B1 包含公式“C1 + D1”,而 B2 包含公式“C2 + D2”。单元格 C1、C2、D1 和 D2 都是常数(在本例中为值 1、2、3 和 4)。
我想要什么:我正在寻找一种方法(已经内置到 excel 中,或者 VBA 中的用户定义函数),它的功能如下:
调用: =ExplodeFormula(A1)
返回:“C1 + D1 + C2 + D2”
有人可以在这里帮助我吗?谢谢!
(编辑)我认为需要做一些事情:
-
某种方法可以将公式中的单元格引用与该公式中使用的函数区分开来。
以某种方式将范围引用与单个单元格引用区分开来(如果一个单元格引用一个范围,就像在 vlookup 的情况下一样,我会在那个级别停下来。
一种迭代第 1 部分和第 2 部分中确定的公式部分并将它们分解为更简单的块的方法,这些块在同一过程中递归运行。
【问题讨论】:
您打算如何处理=SUM(A:A)
之类的问题?
它是否需要能够跨越工作表?引用其他工作簿的公式怎么样?
在您发布的简单案例中,您可能会使用 Range 对象的 DirectPrecedents
属性实现您想要的。
【参考方案1】:
您必须构建一个 Excel 公式解析器并将其递归地应用于原始公式中的任何引用所引用的公式。并注意循环和重复引用!
周围有一些公式解析器,初学者请参阅:http://ewbi.blogs.com/develops/popular/excelformulaparsing.html
出于好奇:您为什么要这样做?
【讨论】:
关于我为什么要这样做的好问题。原因如下:我厌倦了等待 30 多分钟让电子表格中的数据表进行计算。 Excel 用于“假设”分析的数据表非常慢。我的想法是,通过将公式分解为最基本的组件,我可以轻松创建一个计算速度比数据表快得多的敏感度表。当你有一个简单的公式时,这很容易手工完成。但是,如果是复杂的分析,从头到尾追溯公式是非常费力的。 数据表很慢,而且单线程迭代。您可以通过 a) 加快正常的 XL 计算过程 b) 编写一些 VBA 代码来更有效地自动化迭代计算过程来加速它们。如果您想进一步探索,请离线联系我以上是关于将 Excel 公式分解为仅依赖不引用其他单元格的单元格的公式的主要内容,如果未能解决你的问题,请参考以下文章
使用 python xlrd 从 Excel 单元格中获取公式