有没有办法连接Excel中的两个数组没有VBA?

我想创build一个公式,返回两个不同长度数组的连接。 我需要这个连接的另一个公式的一部分,我想避免“帮手”行,如果可能的话。

看下面的例子数据。

在这里输入图像说明

目标是产出{10;11;12;13;20;21;22} 。 当然,这可以很容易地被硬编码到公式中,但是这些值是dynamic的,所以这不是一个选项。

我尝试了以下内容:

 {A1:A4;B1:B3} 

但是这显然是无效的Excel语法。

有解决scheme吗?

Excel不能以你描述的方式直接连接数组(也就是简单地把它们连接起来)。然而,没有使用辅助函数,这个问题有一个(复杂的)解决scheme。

基本上你需要做的是将{10;11;12;13}{10;11;12;13;0;0;0} ,并将{20;21;22}转换为{0;0;0;0;20;21;22} 。 一旦你有了这个结果,你可以添加两个长度为7的数组来得到想要的结果。

那么如何将零添加到数组的开头或结尾呢?

答案是以一种聪明的方式使用matrix乘法( MMULT Excel内置函数)。

我不会解释为什么这是结果的所有math,因为我认为它是从编程太离题,但最终以下matrix乘法方程给你所需的结果:

 [1 0 0 0] [10] [10] [0 1 0 0] * [11] = [11] [0 0 1 0] [12] [12] [0 0 0 1] [13] [13] [0 0 0 0] [ 0] [0 0 0 0] [ 0] [0 0 0 0] [ 0] 

或者在Excel中,您可以input以获得结果:(为了提高可读性,我添加了换行符。)

 = MMULT({1,0,0,0; 0,1,0,0; 0,0,1,0; 0,0,0,1; 0,0,0,0; 0,0,0,0; 0,0,0,0},A1:A4) 

如果在单元格中突出显示此公式并按F9键,则应注意到它会给出{10;11;12;13;0;0;0}的所需结果。

同样,下面的公式会得到你想要的结果{0;0;0;0;20;21;22}

 = MMULT({0,0,0; 0,0,0; 0,0,0; 0,0,0; 1,0,0; 0,1,0; 0,0,1},B1:B3) 

将这两个数值相加得到所期望的最终结果,即{10;11;12;13;20;21;22}


注意

在这一点上,这可能是足够的信息为您的需要/需求。 但是,对于大型数组,将这些1和0的matrix硬编码到公式中可能太麻烦。 如果是这种情况,请继续阅读,告诉您如何自动生成1和0的matrix,而不是对它们进行硬编码。


我们如何自动生成上面显示的这些1和0的大matrix?

再一次没有解释“为什么”,因为我认为讨论会太长,而且无关紧要,下面是一个产生第一个1和0的matrix的公式:

 = (ROW(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(ROWS(A1:A4)+ROWS(B1:B3),1))) =COLUMN(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(1,ROWS(A1:A4)))))+0 

1和0的第二个matrix的公式略有不同:

 = (ROW(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(ROWS(A1:A4)+ROWS(B1:B3),1))) =(COLUMN(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(1,ROWS(B1:B3))))+ROWS(A1:A4)))+0 

最终的公式

连接两个(垂直)数组的最后一个公式如下所示:(为了提高可读性,添加了多个换行符)

 = MMULT( (ROW(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(ROWS(A1:A4)+ROWS(B1:B3),1))) =COLUMN(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(1,ROWS(A1:A4)))))+0, A1:A4) +MMULT( (ROW(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(ROWS(A1:A4)+ROWS(B1:B3),1))) =(COLUMN(INDIRECT(ADDRESS(1,1)&":"&ADDRESS(1,ROWS(B1:B3))))+ROWS(A1:A4)))+0, B1:B3) 

最后的注意事项/思路

使用这个公式的好处是它允许数组连接而不使用VBA。 缺点是这种连接数组的方法只能使用数字,而不能使用文本。 (这是因为MMULT需要数字。)