不使用 VBA 即可应用任意公式 n 次?

不使用 VBA 即可应用任意公式 n 次?

我有以下单元格:

答案1:

justsometext

B1:

3

C1:

=DOSOMETHING(A1)

我想应用该公式C1n 次(n 为 3,中的值B1),因此在这种情况下它意味着:

C1:

=DOSOMETHING(DOSOMETHING(DOSOMETHING(A1)))

有没有可能不使用宏来做到这一点,也许通过使用数组公式?

更新:

重复的次数并不总是 3,而是会随着时间而变化和/或每行都不同。

这是一个简单的示例:

示例工作表的屏幕截图

请注意,该解决方案应该适用于任何公式,而不仅仅是像示例中那样附加一个常量字符串。

答案1

那么我会用= Value & REPT("_checked", NoOfExecutions)

如果您总是需要执行类似示例中的操作(连接字符串),它会运行得很好。

如果您需要使用其他公式,这是我能想到的:

  • 我们将需要使用的函数分开:开始(应该在主参数之前的所有内容)和结束(参数之后的所有内容,包括附加参数)。例如,如果我们使用函数LEFT(value, 2)LEFT(它将在开头和, 2)结尾处运行。

  • 我们将公式构建为带有连接和的文本REPT。参考图中的示例,单元格 C6 中的公式将是: = "=" &REPT($B$2,B6) & $A6 & REPT($B$3,$B6)

  • 然后您需要复制该单元格并将其粘贴为单元​​格 D6 中的值;然后单击公式栏中的公式并按键盘上的 Enter 键。

虽然只有几个步骤,但是避免了 VBA。

示例图片

答案2

不,很抱歉,一般情况下这是不可能的任何公式并使其自动更新。也就是说,无需使用 VBA。

然而,可以针对极少数特定公式(如连接常量字符串)完成此操作。也可以针对特定公式集完成此操作,但需要手动更新,如VFor 的回答

最接近一般解决方案的方法是重新排列单元格,将DOSOMETHING公式嵌入特殊的包装公式中,然后使用辅助列。

对于您提供的示例工作表:

显示 OP 示例的工作表屏幕截图

重新排列如下:

显示重新排列的工作表屏幕截图

输入以下公式D2,然后按 ctrl-enter/copy-paste/fill-down&right/auto-fill 进入表格其余列:

=IF(COLUMN()-COLUMN($C2)>$A2,"§",C2&"_checked")

输入以下公式B2,然后按 ctrl-enter/copy-paste/fill-down/auto-fill 将其填充到表格其余列中:

=INDEX(C2:INDEX(2:2,1,COLUMNS(2:2)),MATCH("§",C2:INDEX(2:2,1,COLUMNS(2:2)),0)-1)


请注意,所需的辅助列数量是允许的最大值 n 加 1。如果辅助列的数量不足以容纳输入的值,则会出现错误:

显示错误的工作表屏幕截图

解释:

辅助列的通用包装公式为:

=IF(COLUMN()-COLUMN($C2)>$A2,"§",DOSOMETHING(C2))

哪里DOSOMETHING(C2)任何仅基于的公式C2(例如,LEFT(C2,LEN(C2)-1)逐步删除最后一个字符)。

包装公式通过对左侧的单元格进行操作来发挥作用,从而有效地将公式“嵌套”到其所在行的右侧。

IF(COLUMN()-COLUMN($C2)>$A2,"§",部分使用列索引来倒数公式嵌套的次数DOSOMETHING,一旦达到列中指定的次数,A它就会输出终止符字符串。这些字符串不一定需要是§。它们只需要是绝不是对任何允许的嵌套公式进行评估的结果Value


公式Result看起来比较复杂。然而,这些部分只是列右侧C2:INDEX(2:2, 1, COLUMNS(2:2))行的子范围。2Result

因此,该公式基本与以下公式相同:

=INDEX(2:2,MATCH("§",2:2,0)-1)

这使得它更容易理解。

(请注意,如果启用迭代计算,此公式实际上有效。)

看这个比较简单的公式,很显然,该公式返回的是n级嵌套DOSOMETHING函数结果。

答案3

要在单元格“C1”中应用公式,您需要应用迭代的次数为 n。

在此处输入图片描述

怎么运行的:

  1. 点击文件选项然后公式
  2. 寻找启用迭代计算复选框并检查一下。
  3. 为了最大迭代次数写入值,例如 5。
  4. 在单元格中写入此公式C1

=B1+C1

C1您会发现 Excel 计算了五次公式。

您可以根据需要多次设置新值,具体步骤如下1 to 3.

答案4

这可能看起来有点疯狂,但它可能会有所帮助。

假设 A 列包含所有文本值,B 列包含您想要的迭代次数。此外,为了便于解释,假设 B 列有一个最大值,例如 4。如果您无法为 B 列设置最大值,那么这种方法就行不通。

首先,在顶部添加一行,在 C、D、E、F 列顶部显示数字 1 - 4。在单元格 C2 中,输入如下公式:(=IF(C$1=$B2,DOSOMETHING(A2),"")对于该公式的最后一部分,,"")如果您使用的是字符串,则输入,,0)如果您使用的是数字,则输入)。

然后在 D2 中输入=IF(C$1=$B2,DOSOMETHING(DOSOMETHING(A2)),"")。E2 和 F2 也是如此。现在,如果您复制单元格 C2 - F2 并将其粘贴到 C - F 列中,您将得到一个奇怪的矩阵,其中除了根据 B 列中的迭代次数具有所需值的列之外,所有内容都是空白(或零)。

现在对于最后一列(在我的示例中为 G 列),连接(或求和,如果使用数字)前四列,以获得一列中所需的一组值。可选择隐藏四个计算列。

像这样:

在此处输入图片描述

相关内容