Arrays Excel函数:按分隔符将字符串拆分为水平数组
这次我确实在这里找到了解决问题的方法,但我不知道如何使用它 基本上我想转换字符串,比如 “aa#b#ccc#1#2” 变成一个水平的数组,就像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}
以后在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))))