Arrays Excel函数:按分隔符将字符串拆分为水平数组

Arrays Excel函数:按分隔符将字符串拆分为水平数组,arrays,excel,Arrays,Excel,这次我确实在这里找到了解决问题的方法,但我不知道如何使用它 基本上我想转换字符串,比如 “aa#b#ccc#1#2” 变成一个水平的数组,就像 {aa.b.ccc.1.2} 以后在Sumproduct中使用它们。因此,本文似乎起到了作用: 在那里我找到了公式: TRIM(MID(SUBSTITUTE(A1,"#",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN(A1)-LEN(SUBSTITUTE(A1,"#",""))+1))-1)*99+((ROW(OFFSE

这次我确实在这里找到了解决问题的方法,但我不知道如何使用它

基本上我想转换字符串,比如

“aa#b#ccc#1#2”

变成一个水平的数组,就像

{aa.b.ccc.1.2} 
以后在Sumproduct中使用它们。因此,本文似乎起到了作用:

在那里我找到了公式:

TRIM(MID(SUBSTITUTE(A1,"#",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN(A1)-LEN(SUBSTITUTE(A1,"#",""))+1))-1)*99+((ROW(OFFSET($A$1,,,LEN(A1)-LEN(SUBSTITUTE(A1,"#",""))+1)))=1),99))
但是,这将返回一个垂直数组,如:

{aa;b;ccc;1;2}
当我把这个和Sumproduct结合起来时

Sumproduct((a5:a10)*(b5:b10=ABOVE FORMULA))
我只得到“aa”的总和,其余的都没有。我尝试了转置(上面的公式),但没有成功

你能帮我吗

许多问候, 彼得

另一个问题是我的数字变成了字符串,但这是我能处理的

PPS:{aa.b.ccc.1.2}当我在公式“{=b1:f1”}上按F9键时,我会看到这种类型的数组

改用ISNUMBER(MATCH()):

即使使用SUMPRODUCT,在退出编辑模式时也需要使用Ctrl-Shift-enter而不是enter

编辑:

略短且波动性较小的配方:

=TRIM(MID(SUBSTITUTE(A1,"#",REPT(" ",99)),(ROW(INDEX(AAA:AAA,1):INDEX(AAA:AAA,LEN(A1)-LEN(SUBSTITUTE(A1,"#",""))+1))-1)*99+1,99))
因此,总的来说:

=SUMPRODUCT((A5:A10)*(ISNUMBER(MATCH(B5:B10&"",TRIM(MID(SUBSTITUTE(A1,"#",REPT(" ",99)),(ROW(INDEX(AAA:AAA,1):INDEX(AAA:AAA,LEN(A1)-LEN(SUBSTITUTE(A1,"#",""))+1))-1)*99+1,99)),0))))
并在退出编辑模式时使用Ctrl-Shift-enter而不是enter

如您所见,我们正在将垂直数组传递给匹配:

这将导致传递给SUMPRODUCT的正确的真/假数组:


转置肯定会将其转换为水平数组。所以问题出在别处。为您的问题添加一个表格,显示
a5:b10
的内容,以便我们可以重现您的问题。嗨,斯科特,做得好,谢谢。另外,谢谢你非常详细的解释。现在,我的excel表格已经充满了大量的公式和引用,我担心如果我广泛使用这种方法来节省一些数组,我的excel表格会变得太复杂和太慢。您是否可以查看并检查这种样式是否可以引用数组?
=SUMPRODUCT((A5:A10)*(ISNUMBER(MATCH(B5:B10&"",TRIM(MID(SUBSTITUTE(A1,"#",REPT(" ",99)),(ROW(INDEX(AAA:AAA,1):INDEX(AAA:AAA,LEN(A1)-LEN(SUBSTITUTE(A1,"#",""))+1))-1)*99+1,99)),0))))