配列数式で遊んでいる間、「シート」で以前に使用できた行と列よりも多くの行と列が結果にある場合、Googleスプレッドシートは必要な行を自動的に追加します。 「ときどき」と言ったのは、なぜGoogleスプレッドシートが新しい行を自動的に追加するのか、そうでないのかがまだわからないためです。
MMULTをオープンエンドリファレンス(A:A)で使用する場合など、事態を悪化させるには、再計算に数分かかります。
次のようなオープンエンドの参照を持つ式があるとしましょう
=ARRAYFORMULA(MMULT(N(ROW(A2:A)>=TRANSPOSE(ROW(A2:A))),SIGN(ROW(A2:A))))
シートに5,000行ある場合、結果には25,000,000のセルが含まれます。次のエラーメッセージが返される場合があります。
エラー
結果の配列が大きすぎました。
また、Googleスプレッドシートでは多くの行が追加され、再計算に数分かかる場合があります。
オープンエンドの参照(A:A)の代わりにクローズエンドの参照(A1:A10)を使用する以外に、行または列を挿入しないようにGoogleスプレッドシートに指示する方法はありますか?
ARRAY_CONSTRAIN(array、row_limit、column_limit)を使用します
ARRAY_CONSTRAIN関数 は、必要な行と列の数を返すことができます。それに応じて、row_limitパラメーターとcolumn_limitパラメーターを設定します。このパラメーターを自動的に設定するには、COUNTやCOUNTAなどの関数を使用できます。
組み込み関数を使用してデータ範囲を考慮して行/列の数を計算するには、
行の場合、次のような式を使用します
=MAX(IF(LEN(A2:A)>0,ROW(A2:A)-1,0))
列の場合、次のような式を使用します
=MAX(IF(LEN(1:1)>0,COLUMN(1:1)-1,0))
質問のサンプル数式は次のようになります。
= ARRAYFORMULA( ARRAY_CONSTRAIN( MMULT(N(ROW(A2:A)>> TRANSPOSE(ROW(A2:A))))、SIGN(ROW(A2:A )))、 MAX(IF(LEN(A2:A)> 0、ROW(A2:A)-1,0))、 MAX(IF(LEN(1:1)) > 0、COLUMN(1:1)-1,0)) ) )