excel - 当单元格中的函数 "parses"多次包含对同一函数的相同调用时,Excel有多智能

标签 excel worksheet-function vba

考虑一下:单元格C1有一个多次调用另一个函数的公式:

例如=ExcelFuntionA(ExcelFunctionCallB(1), ExcelFunctionCallB(1)-1, ExcelFunctionCallB(1)-2, ExcelFunctionCallB(1)*3)

请注意,传递给 ExcelFunctionCallB 的参数每次都具有相同的值。

如果 ExcelFunctionCallB(..) 是一个涉及大量处理的函数,如果在花药中找到 ExcelFunctionCallB(..) 的结果,Excel 会更快地处理公式单元格,并将上述公式更改为引用该单元格 4 次。

例如

假设 A2 的公式为 ExcelFunctionCallB(..) C1 将读取 =ExcelFuntionA(A2, A2-1, A2-2, A2*3)

我想知道excel有多智能!

  1. 是否可以看到调用是相同的并且仅处理对函数的调用一次?

  2. 对于数组公式和普通函数公式来说,这样做是否足够智能?

  3. 如果调用一个用 VBA 编写的函数,它是如何工作的?
    请注意 VBA 函数可以直接引用单元格 不作为参数传递(我知道这很顽皮,但它 发生,并且返回不同结果的可能性很小 值,即使与其使用的参数相同。)

根据上面的内容,有没有办法告诉代码VBA函数不直接访问任何Excel单元格? (有点像我想象的application.volatile)

一个更现实的例子:我实际上一直在尝试这样的公式:

=MID($A2, FIND("@",SUBSTITUTE("#"& $A2 & "#","#","@",B$1)), FIND("@", SUBSTITUTE("#"& $A2 & "#","#","@",B$1+1)) - FIND("@",SUBSTITUTE("#"& $A2 & "#","#","@",B$1)) - 1)

这在未批准的 SO 问题 24182334/splitting-text-columns 的拟议答案之一中有详细记录

请注意,此公式使用文本 FIND("@",SUBSTITUTE("#"& $A2 & "#","#","@",B$1)) 三次.

[PS。我知道 VBA 中的拆分和文本到列菜单选项。]

最佳答案

If ExcelFunctionCallB(..) is a function that involves significant processing, would excel process the formula quicker if the result of ExcelFunctionCallB(..) was found in anther cell and the above formula was changed to reference this cell 4 times.

这是正确的,引用已计算的单元格比在单个单元格中多次重新计算同一事物要快。 Excel 将分别计算每一项

此外,正如 pnuts 所指出的,此链接可能令人感兴趣:http://msdn.microsoft.com/en-us/library/office/ff700515%28v=office.14%29.aspx

(作为克里斯·尼尔森建议的答案发布)

关于excel - 当单元格中的函数 "parses"多次包含对同一函数的相同调用时,Excel有多智能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27849655/

相关文章:

vba - Excel vba 进度条不工作 : invalid property value

excel - 如果所有 Excel 列值不一致则返回

excel - 在 Excel 中查找与最大值关联的另一列中的单元格

vba - 编译错误-必需变量-无法分配给此表达式

VBA - 循环和低效的 If 语句

vba - 取消合并 Excel 行和重复数据

python - 使用 xlsxwriter 自动扩展行

excel - 查找包含数字的行中的第一个单元格?

vba - Excel VBA - 匹配 2 列并删除 2 张纸上的重复项

vba - 将存储为文本的数字转换为数字 - 小数