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

时间:2017-12-27 20:43:28

标签: arrays excel excel-formula formula

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

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

理想情况下,我正在寻找愚蠢的东西 =串连(数组((A1,一个,字符,VLOOKUP(A,表,如图1所示,假))))

分解为

=串连(数组(([靶标],[变种],[属性],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的过程都是一样的,sooo不应该用一个像我上面那样的循环用一个简洁的浓缩方程写出来吗?

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

由于

1 个答案:

答案 0 :(得分: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来确认。

这将返回工作表1中B列中的值,其中A1中的每个字母都在Sheet1的A列中找到。

例如我的sheet1看起来像这样:

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()包装器。