Arrays 填充数组的Excel公式
示例: 假设我有几个一维数组,例如A、B和C: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
--- --- ---
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中执行此操作!),但我编辑了我的答案以显示公式方法。看起来更新的解决方案完全符合我的要求。明天我将对其进行更多测试,并查看是否可以(尝试)理解其工作原理,然后标记答案。谢谢!