答案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
公式嵌入特殊的包装公式中,然后使用辅助列。
对于您提供的示例工作表:
重新排列如下:
输入以下公式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))
行的子范围。2
Result
因此,该公式基本与以下公式相同:
=INDEX(2:2,MATCH("§",2:2,0)-1)
这使得它更容易理解。
(请注意,如果启用迭代计算,此公式实际上有效。)
看这个比较简单的公式,很显然,该公式返回的是n级嵌套DOSOMETHING
函数结果。
答案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 列),连接(或求和,如果使用数字)前四列,以获得一列中所需的一组值。可选择隐藏四个计算列。
像这样: