web-dev-qa-db-ja.com

Googleスプレッドシートで行と列の自動挿入をブロックする方法は?

配列数式で遊んでいる間、「シート」で以前に使用できた行と列よりも多くの行と列が結果にある場合、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スプレッドシートに指示する方法はありますか?

2
Rubén

簡潔な答え

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))
)
)
4
Rubén