如何在没有宏的情况下在excel中进行循环

问题描述 投票:0回答:1

:/抱歉重启问题,但遗憾的是我还没有足够的代表对帖子发表评论。 How to loop in excel without VBA or macros?,所以我的问题实际上是相同的,但应用程序略有不同。我一直想知道如何在没有宏的情况下在excel中进行递归(希望我正在使用这个花哨的单词)循环。

对于这个特殊的例子,它更像是一个for循环,我想为一个单元格中的每个字符创建一个vlookup,然后连接结果。

理想情况下,id正在寻找傻事物= concatenate(数组(对于(A1,a,chars,vlookup(a,table,1,false))))

分解成

=串连(数组(([靶标],[变种],[属性],VLOOKUP([变种],表1中,假))))

这将导致连接(vlookup(mid(A1,1,1),table,1,false),vlookup(mid(A1,2,1),table,1,false),vlookup(mid(A1,3, 1),table,1,false)...表示A1的字符长度

我知道上面写的内容看起来很迟钝但这就是我问这个问题的原因;因为我真的不知道。 :P

如果你仍然对我为什么要这样做感到困惑,我目前有一张工作表使用查找表将文本转换为代码128条形码,但是,每次移动它时引用都会中断。

我当前的解决方案接受输入文本,将每个char打破到自己的单元格中,应用查找,然后在一些数学后重新组合。我只是想知道,每个char的过程都是一样的,所以我不应该用一个像我上面那样的循环用一个简洁的浓缩方程写出来吗?

我知道,我知道,这个过程可以用宏完成,但这不是我的观点。我的问题是可以将重复循环写在excel中作为公式吗?

谢谢

arrays excel excel-formula formula
1个回答
0
投票

如果您有Office 365,则可以使用此数组公式:

=CONCAT(INDEX(Sheet1!B:B,N(IF({1},MODE.MULT(IFERROR(MATCH(MID(A1,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))),1),Sheet1!A:A,0),FALSE)*{1,1})))))

作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。

这将返回Sheet 1上B列中的值,其中A1中的每个Letter都在Sheet1的A列中找到。

例如,我的s​​heet1看起来像这样:

enter image description here

所以关于回报的公式:

enter image description here


现在,如果表中的数据在查阅列上排序:

enter image description here

然后我们可以使用这个更简单的数组公式:

=CONCAT(LOOKUP(MID(A1,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))),1),Sheet1!A:A,Sheet1!B:B))

enter image description here


另一种变体,如果返回数字则可以使用SUMIF:

=CONCAT(SUMIF(Sheet1!A:A,MID(A1,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))),1),Sheet1!B:B))

正如您所看到的,逐字逐句迭代的部分是:

MID(A1,ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))),1)

这部分使它成为一个数组公式,可用于大多数版本的Excel。

需要Office 365的部分是CONCAT()包装器。

© www.soinside.com 2019 - 2024. All rights reserved.