在没有VBA的情况下创build类似Excel的“循环”
我正在尝试构build一个在Excel中模拟“循环”的公式。 电子表格将数据库中的数据转换为四个电子表格。 如果find的值是#N / A,则公式需要遍历表单,移动到下一个表单上。 当前设置使用index(match())
来查找表格中的值。 为了在表单之间移动,我使用了choose()
来驱动一个indirect()
来切换到下一个表单,但我不知道如何模拟循环…问题似乎是我需要引用function回到自己,然后跳出循环。
我想象的解决scheme会是这样的
=IFNA(CHOOSE( [the next number], INDEX(Sheet[the next number]!A1:Z500, MATCH(G1, Sheet[the next number]!A1:Z1), MATCH(A250, Sheet[the next number]!A1:A500)
该表不能使用VBA。
继我的评论:可以使用迭代计算,类似于这个设置 –
-
A1
:=INDEX(B1:B4,A2)*1
-
A2
:IF(ISERR(A1),A2+1,A2)
-
B1:B4
:查找值
当A1
索引遇到B1:B4
一个字母时,它会抛出一个错误(来自*1
)
当A2
在A1
看到错误时,它会增加
由于A2
是A1
正在索引的行值,因此A1
会查看下一行,这可能会导致错误,也可能不会导致错误
当A1
不是错误时, A2
停止递增。 看到下面的图像
一个类似的设置可以用来迭代通过使用ISNA
在索引公式中寻找错误的工作表,我会用这个例子,但我不是100%确定你的公式正在做什么(它有太多的开放括号!)
笔记
要访问迭代公式选项,请转到File
– > Options
– > Formulas
– >检查Enable iterative calculation
。 如果要按F9并手动逐张增加纸张,请将最大迭代值设置为1,否则将其设置为您正在查看的纸张数(4?)。 这样你会循环你的帮手单元4次,它会停止递增,无论何时它不检测到错误。
另外,我喜欢将我的循环参考公式A2
在一个额外的IF(A3 = "rst",1,...)
这样我就可以重新设置该值,而不用重新input公式
迭代计算非常好,因为它们可以让您有效地将数据保存在Excel中计算中,但必须谨慎使用以避免无限循环和巨大的计算时间 – 我使用VBA,因为它更安全
将公式分成5个不同的公式会更简单:
前4个在4张纸上进行查找
那么第五个公式将使用嵌套的If(或IFS,如果您在Office 365 Excel 2016中)从4个公式中select具有有效结果的查找。