4

例: A、B、C など、複数の 1D 配列があるとします。

 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

したがって、配列の 1 つをパディングする「式」(実際には複数の既存の標準式の組み合わせ) は、元の配列名/範囲、元の配列の先頭にパディングする値の数、数値の 4 つの入力を効果的に持つことになります。最後にパディングし、パディング値 (つまり、0、NA() など)。

最初のアプローチ: 私の最初の試みは、次のように 3 つの配列セクション (開始パディング配列、元の配列、および終了パディング配列) を 1 つの配列に連結することでした。

=INDIRECT("{" & IF(_NPadBegin>0, REPT(_PadVal&",", _NPadBegin-1) & _PadVal&",", "") & _ArrayName & IF(_NPadEnd>0, "," & REPT(_PadVal&",", _NPadEnd-1) & _PadVal, "") &"}")

(アンダースコア付きの変数は、4 つの入力の名前付き範囲です)

ただし、このような配列を構築することはできないようです。数式を使用して 1D 配列を結合する他の方法を検索しましたが、空になりました。

もう 1 つの方法は、最終的に必要な長さの配列を作成し、最初にパディング値を設定することです。たとえば、0 の行が 8 つある A' 配列を作成します (動的数式でこの手順を実行できます)。次に、この初期化された配列の値を元の配列で上書きし、元の配列を正しい位置。たとえば、A' の行 2 ~ 4 の 0 の値を A の値で上書きします (この 2 番目のステップの実行方法がわかりません...)。

背景: 複数の 1D 配列のデータ (動的な名前付き範囲を使用して生成) があり、それらを 1 つの折れ線グラフに一緒にプロットしたいと考えています。ただし、配列の長さは異なるため、配列の先頭/末尾に特定の数の NA() 値を各配列に埋め込む必要があります。また、インデックスに基づいて「並べる」必要があります。

おそらく、VBA でこれを実現するのはそれほど難しくありませんが、(ユーザー定義ではない) 数式ベースのソリューションを使用することをお勧めします。

4

1 に答える 1

2

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 配列であると仮定します

于 2012-12-04T18:37:46.943 に答える