数组 – Excel公式填充数组

例子:

假设我有几个1D数组,例如A,B和C:

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

我想使用公式来填充这些数组(命名范围),因此它们具有相同的行数. (编辑,提供更完整的解释:)我还希望能够将每个数组的起始位置移动指定的行数.这是一个示例输出,我将A移动两个,B移动三个,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

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

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

= INDIRECT(“{”& IF(_NPadBegin> 0,REPT(_PadVal&“,”,_ NPadBegin-1)& _PadVal&“,”,“”)& _ArrayName& IF(_NPadEnd> 0,“, “& REPT(_PadVal&”,“,_ NPadEnd-1)& _PadVal,”“)&”}“)

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

但是,似乎不可能像这样构建一个数组.我已经搜索了使用公式组合1D数组的其他方法,但是空洞了.

另一种方法可能是创建最终所需长度的数组,并最初使用填充值填充它.例如,创建一个8行为0的A’数组.(我可以在动态公式中执行此步骤.)然后,您可以使用原始数组覆盖此初始化数组中的值,确保将原始数组移位到正确的位置.例如,用A值覆盖A’的第2行到第4行中的0值.(我无法弄清楚如何执行第二步……)

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

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

最佳答案 如果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((行(间接(“1:”& NPadBegin NPadEnd ROWS(_ArrayName)))> NPadBegin)*(行(间接(“1:”& NPadBegin NPadEnd ROWS(_ArrayName)))< = ROWS (_ArrayName)NPadBegin),N(OFFSET(_ArrayName,ROW(INDIRECT(“1:”& NPadBegin NPadEnd ROWS(_ArrayName))) – 1-NPadBegin,0,1)),PadVal) 假设_ArrayName是一个垂直的1D数组

点赞