INDEX の領域選択と参照同一性
バージョン 2.384.101 は INDEX(source,row_num,column_num,area_num) を拡張し、計算配列に対する第 4 引数を受け付けるほか、定義名と LET を通じてサポートされる実際の複数領域参照を組み合わせられます。行・列・領域のセレクターは一緒にブロードキャストできます
1 つの計算配列と複数の参照領域
定数や計算配列は 1 つのソース領域です。そのため INDEX(SEQUENCE(2,2),2,2,1) は 4 を返します。第 4 引数を丸ごと省略しても領域 1 が選ばれ、明示的に空にした第 4 引数は無効な領域セレクターです
参照ユニオンには、同一シート上の複数の実際のワークシート領域を含められます。area_num がユニオン順で領域を選択し、行番号と列番号はその選択された領域内で適用されます
以下の例では、Source!A1:B2 は {1,2;3,4} を、Source!D1:E2 は {10,20;30,40} を含みます。Other!A1:B2 は {100,200;300,400} です
| 数式 | 結果 |
|---|---|
INDEX((Source!A1:B2,Source!D1:E2),2,2,2) | 40。スカラー参照の結果を保持します |
SUM(INDEX((Source!A1:B2,Source!D1:E2),0,0,2)) | 100。2 番目の領域全体を合計します |
INDEX(SEQUENCE(2,2),0,0,1) | {1,2;3,4}。計算値の配列です |
INDEX(SEQUENCE(2,2),2,2,2) | #REF!。計算配列には 2 番目の領域がないためです |
定義名、LET、CHOOSE
式が (Source!$A$1:$B$2,Source!$D$1:$E$2) である対応済みのローカル定義名は両方の領域を保持します。ネストした名前もその同一性を保ち、AREAS(NamedAreas) は 2 を返します
INDEX(NamedAreas,2,2,2) は 40 を返し、ISREF(INDEX(NamedAreas,0,0,2)) は TRUE を返します。ROW、COLUMN、ROWS、COLUMNS と集計系の利用側は、選択された参照座標を使い続けます
相対参照の名前は利用側の位置ごとに解決され、ワークシート ローカルの名前は同じスペルのワークブック スコープ名より優先します。参照同一性を保っても、相対名が最初の評価位置に固定されることはありません
LET(areas,(Source!A1:B2,Source!D1:E2),INDEX(areas,2,2,2)) LET(areas,(Source!A1:B2,Source!D1:E2),ISREF(INDEX(areas,0,0,2)))
これらの式はそれぞれ 40 と TRUE を返します。SEQUENCE(2,2) へのバインディングは計算値の配列のままで、参照同一性を獲得しません
実際の参照を選ぶスカラーの CHOOSE は、選択された参照を保持します。別シートへの選択も含まれます。INDEX(CHOOSE(2,Source!A1:B2,Other!A1:B2),2,2) は 400 を返し、対応するスカラー参照の結果は ISREF を通ります
配列セレクター付きの CHOOSE は、参照領域のユニオンを作るのではなく、セレクターの向きに従って値を組み合わせます。CHOOSE({1,2},Source!A1:B2,Source!D1:E2) は {1,20;3,40} を返し、2 を指定した追加の INDEX 領域セレクターはやはり #REF! を返します
3 つのセレクター配列
行・列・領域の各セレクターはスカラー値または配列を受け付けます。サイズ 1 の次元はブロードキャストされ、対向する行・列の向きはクロス積を作り、一致する向きは位置をペアにします。形状が異なる場合、対応しない位置には個別の #N/A エラーが入ります
INDEX((Source!A1:B2,Source!D1:E2),{1;2},2,{1,2})
INDEX((Source!A1:B2,Source!D1:E2),2,2,{2;1})
最初の式は {2,20;4,40} を、2 番目の式は {40;4} を返します。選択された値は文字列、Boolean、数値、型付きエラーの表現を保持します
セレクターのどれかが配列なら、結果は参照ではなく値配列です。行や列のゼロ、省略された行・列セレクターは、結果位置ごとにその軸の最初の要素を選びます
これはスカラーのみの抽出とは異なります。スカラーの行・列が両方ゼロなら選択領域全体を返しますが、INDEX((Source!A1:B2,Source!D1:E2),0,0,{1,2}) は 2 つのネストした 2x2 配列ではなく {1,10} を返します。合計は 11 です
領域の型変換とエラー
領域セレクターは小数の数値をゼロ方向へ切り捨て、数値テキストと Boolean 値を受け付けます。1.9、"1"、TRUE は領域 1 を選びます
領域ゼロ、FALSE、明示的に空の第 4 引数、負の値、ゼロに切り捨てられる小数は #VALUE! を返します。非数値テキストも #VALUE! を返し、利用可能な領域数を超える正の領域は #REF! を返します
型付きのセレクター エラーは既存のエラーコードのまま伝搬します。配列セレクターの場合、無効な領域は対応する結果位置でのみエラーを生みます。INDEX(SEQUENCE(2,2),2,2,{1,2}) は {4,#REF!} を返します
既存のエラーが後続の境界チェックで置き換えられることはありません。INDEX(#N/A,1,1,2) は #N/A を返し、INDEX(SEQUENCE(2,2),#N/A,1,#DIV/0!) は行セレクターの #N/A を保持します
実在するローカル ワークシートで修飾された無効な参照は #REF! のままです。Source!#REF! や 'Plan! O''Brien'!#REF! も含まれます。そのローカル参照エラーを含む定義名も、INDEX や ISFORMULA に渡すと #REF! を保持します
ローカル エラー トークンはパーセントや暗黙的なインターセクションの演算子と組み合わせられ、シート区切りの後ろの空白は受け付けられます。ワークシート名と区切りの間の空白は、受け付けられる構文の外です
"Source!#REF!" のような引用符付きの数式文字列はテキストのままです。配列定数の中のワークシート修飾参照トークンは、サポートされるソース文法の外です
行・列セレクターは既存のゼロ抽出規則と負の値の検証を保ちます。領域ゼロがソース全体の抽出を意味することはありません
保存、依存関係、上限
XLSX の自動スピル計算はセレクター配列の結果を伸縮させ、アンカーが所有する不要なスピルセルを解放します。対応する式は明示的な固定 CSE 宛先の中でも評価でき、XLSX の保存と再オープンを越えて残ります
名前付きセレクターは、評価結果がスカラーでも保守的な動的ストレージを要求することがあります。1 セルの動的マーカーは値や、対応する参照結果の同一性を変えません
選択されたソース参照とネストした名前は依存関係の追跡に参加するため、その後のソース編集は再計算後に観測されます。セレクターの走査と生成された行列ペイロードは、既存の評価ステップと配列メモリの予算を消費します
境界
領域が別々のシートに属す直接ユニオンは #VALUE! を返します。要求された領域番号がそのうち 1 つだけを選ぶ場合でも同じです。1 つの参照を選ぶスカラーの CHOOSE が、対応済みの跨ぎシートの代替手段です
計算配列、定数、値式のユニオンは実際の複数領域参照ではありません。LET に束縛した計算配列ユニオンは #VALUE! を返し、配列の配列という直接ユニオン構文はソース形式として受け付けられません
この契約は検証済みのローカル参照と計算配列の形式を対象とします。すべての外部参照グラフ、すべての参照生成関数、任意のネスト配列コンテナをサポートする意味ではありません
未知のワークシート修飾子が既知のローカル参照エラーとして正規化されることはありません。Excel は NoSuchSheet!#REF! のような数式に対して外部リンク グラフを作ることがありますが、そのグラフへの一致はこのローカル計算契約の対象外です