Excel公式来填充数组

例如:假设我有几个一维数组,比如A,B和C:

ABC --- --- --- 2 4 99 3 5 37 4 6 42 7 

我想用一个公式来填充每个这些数组(这是命名的范围),所以他们有相同数量的行。 (编辑,提供更完整的解释:)我也希望能够将每个数组的起始位置移动指定的行数。 这里是一个输出的例子,我把A移动了2,B移动了3,C移动了一个位置:

  A' B' C' --- --- --- 0 0 0 0 0 99 2 0 37 3 0 42 4 4 0 0 5 0 0 6 0 0 7 0 

因此,“公式”(实际上是多个现有标准公式的组合)来填充其中一个数组将实际上具有四个input:原始数组名/范围,在原始数组开始处填充的值的数量,在最后填充,填充值(即0,NA()等)。

初始方法:我的第一个尝试是将三个数组部分(开始填充数组,开始数组和结束填充数组)连接成一个数组,如下所示:

=INDIRECT("{" & IF(_NPadBegin>0, REPT(_PadVal&",", _NPadBegin-1) & _PadVal&",", "") & _ArrayName & IF(_NPadEnd>0, "," & REPT(_PadVal&",", _NPadEnd-1) & _PadVal, "") &"}")

(其中带下划线的variables是四个input的命名范围)

但是,似乎不可能像这样构build一个数组。 我已经search了其他方法来结合使用公式的一维数组,但空来了。

另一种方法可能是创build一个最终所需长度的数组,并最初使用填充值填充它。 例如,创build一个八行为0的A'数组(我可以在dynamic公式中完成这一步)。然后,您可以用原始数组覆盖这个初始化数组中的值,确保将原始数组移到正确的位置。 例如,用A的值覆盖A'的第2到第4行中的0值(我不知道如何做第二步…)

背景:我有多个一维数组数据(使用dynamic命名范围生成),我想在一个折线图上绘制在一起。 但是,数组的长度不同,所以我需要在数组的开始/结尾处填充一定数量的NA()值。 他们还需要根据索引“排队”。

在VBA中实现这个可能不会太困难,但是我更喜欢一个(非用户定义的)基于公式的解决scheme。

如果A2:A4中的值为2,3和4,请尝试使用此公式

=IF(COUNTIF(A2:A4,ROW(INDIRECT("1:"&D2))-1),ROW(INDIRECT("1:"&D2))-1,0)

其中D2包含数值(在你的例子中是8)。

这将返回这个数组

{0;0;2;3;4;0;0;0}

假定数字序列从零开始 – 公式结尾的零是“填充值”,根据需要更改

好,根据评论你可以做这个数组公式

=IF((ROW(INDIRECT("1:"&NPadBegin+NPadEnd+ROWS(_ArrayName)))>NPadBegin)*(ROW(INDIRECT("1:"&NPadBegin+NPadEnd+ROWS(_ArrayName)))<=ROWS(_ArrayName)+NPadBegin),N(OFFSET(_ArrayName,ROW(INDIRECT("1:"&NPadBegin+NPadEnd+ROWS(_ArrayName)))-1-NPadBegin,0,1)),PadVal)

假定_ArrayName是一个垂直的一维数组

Interesting Posts