Arrays 填充数组的Excel公式

Arrays 填充数组的Excel公式,arrays,excel,insert,excel-formula,pad,Arrays,Excel,Insert,Excel Formula,Pad,示例: 假设我有几个一维数组,例如A、B和C: A B C --- --- --- 2 4 99 3 5 37 4 6 42 7 我想使用一个公式来填充这些数组中的每一个(命名范围),使它们具有相同的行数。(已编辑,以提供更完整的解释:)我还希望能够将每个数组的起始位置移动指定数量的行。这是一个输出示例,其中我将A移动2,B移动3,C移动1个位置: A' B' C' --- --- --- 0 0

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

 A    B    C
---  ---  ---
 2    4    99
 3    5    37
 4    6    42
      7
我想使用一个公式来填充这些数组中的每一个(命名范围),使它们具有相同的行数。(已编辑,以提供更完整的解释:)我还希望能够将每个数组的起始位置移动指定数量的行。这是一个输出示例,其中我将A移动2,B移动3,C移动1个位置:

 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
因此,填充其中一个数组的“公式”(实际上是多个现有标准公式的组合)实际上有四个输入:原始数组名称/范围、原始数组开头要填充的值的数量、结尾要填充的值以及填充值(即0、NA(),等等)

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

=间接({“&IF({NPadBegin>0,REPT({PadVal&“,”,{NPadBegin-1)和{PadVal&“,”,”)和{ArrayName&IF({NPadEnd>0,,”,{REPT({PadVal&“,,{NPadEnd-1)和})

(其中带下划线的变量是四个输入的命名范围)

然而,像这样构建一个数组似乎是不可能的。我搜索了其他方法,使用公式组合1D数组,但结果是空的

另一种方法可能是创建一个最终所需长度的数组,并在最初使用填充值填充它。例如,创建一个包含八行0的“A”数组。(我可以在动态公式中执行此步骤。)然后可以使用原始数组覆盖此初始化数组中的值,确保将原始数组移动到正确的位置。例如,用A的值覆盖A'第2行到第4行中的0值。(我不知道如何执行第二步…)

背景: 我有多个1D数据数组(使用动态命名范围生成),我想在一个折线图上一起绘制。但是,数组的长度不同,因此我需要在数组的开始/结束处用一定数量的NA()值填充每个数组。它们还需要根据索引“排列”


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

如果A2:A4中有值2、3和4,请尝试此公式

=IF(COUNTIF(A2:A4,行(间接(“1:”&D2))-1,行(间接(“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)))谢谢Barry。据我所知,它假设A2:A4(aka_ArrayName))实际上是数组的索引。因此,如果我有数组C,那就是
{99;37;42}
,此解决方案无法工作。我试图扩展您的解决方案,但在尝试插入
行(间接(“1:&ROWS(\u ArrayName))时遇到了问题+_NPadBegin-1
在初始的
COUNTIF
中有
A2:A4
。它给了我
#值!
错误。好吧,我可能不太明白你想要什么。如果{99;37;42}是基数组,那么你期望得到什么结果?我假设你想要一个值数组,除了这三个值之外,所有值都是零(99,37和42)在正确的位置-但这仅在D2(数组大小)为100或更大的情况下在我的解决方案中才有意义。对于输入ArrayName={99;37;42}、NPadBegin=2、NPadEnd=3和PadVal=0,我希望输出为{0;0;99;37;42;0;0;0;0}。明白了!这不容易用公式实现,正如您发现的那样-VBA可能更简单(虽然我无法告诉您如何在VBA中执行此操作!),但我编辑了我的答案以显示公式方法。看起来更新的解决方案完全符合我的要求。明天我将对其进行更多测试,并查看是否可以(尝试)理解其工作原理,然后标记答案。谢谢!