例子:
假设我有几个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数组