[英]Excel formula to pad array
示例:假設我有幾個一維數組,例如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, "") &"}")
(其中帶有下划線的變量被命名為四個輸入的范圍)
但是,似乎不可能建立這樣的數組。 我搜索了使用公式組合一維數組的其他方法,但結果空了。
另一種方法可能是創建最終所需長度的數組,並首先使用填充值填充該數組。 例如,創建一個包含8行0的A'數組。(我可以在動態公式中執行此步驟。)然后,您可以使用原始數組覆蓋此初始化數組中的值,並確保將原始數組移至正確的位置。 例如,用A的值覆蓋A'的第2到4行中的0值。(我不知道如何執行此第二步...)
背景:我有多個一維數據數組(使用動態命名范圍生成),它們希望在單個折線圖上一起繪制。 但是,數組的長度不同,因此我需要在數組的開始/結尾處用一定數量的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((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是垂直 1D數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.