Excel で配列を操作するための制限事項の説明

概要

「適用対象」セクションに記載されている Microsoft Excel のバージョンでは、「計算仕様」のヘルプ トピックに、配列を操作するための制限事項が記載されています。 この記事では、Excel での配列の制限事項について説明します。

詳細情報

Excel では、ワークシート内の配列は、使用可能なランダム アクセス メモリ、配列数式の合計数、および "列全体" ルールによって制限されます。

使用可能なメモリ

[適用対象] セクションに一覧表示されている Excel バージョンでは、ワークシート配列のサイズに制限はありません。 代わりに、コンピューター上の使用可能なメモリによってのみ制限されます。 そのため、数十万個のセルを含む非常に大きな配列を作成できます。

"列全体" ルール

Excel では非常に大きな配列を作成できますが、列全体またはセルの複数の列を使用する配列を作成することはできません。 セルの列全体を使用する配列数式の再計算には時間がかかるため、Excel では数式でこの種の配列を作成することはできません。

注:

Microsoft Office Excel 2003 および以前のバージョンの Excel の列には、65,536 個のセルがあります。 Microsoft Office Excel 2007 の列には、1,048,576 個のセルがあります。

配列の最大数式

Excel 2003 以前のバージョンの Excel では、1 つのワークシートに、別のワークシートを参照する最大 65,472 個の配列数式が含まれる場合があります。 より多くの数式を使用する場合は、1 つのワークシートへの参照が 65,472 個未満になるように、データを複数のワークシートに分割します。

たとえば、ブックの Sheet1 では、次の項目を作成できます。

  • Sheet2 を参照する 65,472 個の配列数式
  • Sheet3 を参照する 65,472 個の配列数式
  • Sheet4 を参照する 65,472 個の配列数式

特定のワークシートを参照する 65,472 を超える配列数式を作成しようとすると、配列数式番号 65,472 の後に入力した配列数式は、入力すると消える可能性があります。

配列数式の例

配列数式の例の一覧を次に示します。 これらの例を使用するには、新しいブックを作成し、各数式を配列数式として入力します。 これを行うには、数式バーに数式を入力し、Ctrl キーを押しながら Shift キーを押しながら Enter キーを押して数式を入力します。

Excel 2007

  • A1: =SUM(IF(B1:B1048576=0,1,0))

    セル A1 の数式は、結果の1048576を返します。 この結果は正しいです。

  • A2: =SUM(IF(B:B=0,1,0))

    セル A2 の数式は、結果の1048576を返します。 この結果は正しいです。

  • A3: =SUM(IF(B1:J1048576=0,1,0))

    セル A3 の数式は、結果の9437184を返します。 この結果は正しいです。

    注:

    数式が 100 万を超えるセルをチェックしているため、数式の計算に長い時間がかかる場合があります。

  • A4: =SUM(IF(B:J=0,1,0))

    セル A4 の数式は、結果の9437184を返します。 この結果は正しいです。

    注:

    数式が 100 万を超えるセルをチェックしているため、数式の計算に長い時間がかかる場合があります。

  • A5: =SUM(IF(B1:DD1048576=0,1,0))

    セル A5 にこの数式を入力すると、次のいずれかのエラー メッセージが表示されることがあります。

    Excel では、1 つ以上の数式の計算中にリソースが不足しました。 その結果、これらの数式は評価できません。

    受信したメッセージに関連付けられている一意の番号を確認するには、Ctrl キーと Shift キーを押しながら I キーを押します。 このメッセージの右下隅に次の番号が表示されます。

    101758

    この場合、ワークシート配列のサイズが大きすぎて使用可能なメモリに対して大きすぎます。 したがって、数式を計算することはできません。

    さらに、Excel が数分間応答を停止するように見える場合があります。 これは、入力した他の数式で結果を再計算する必要があるためです。

    結果が再計算されると、Excel は期待どおりに応答します。 セル A5 の数式は、値 0 (ゼロ) を返します。

Excel 2003 以前のバージョンの Excel

  • A1: =SUM(IF(B1:B65535=0,1,0))

    セル A1 の数式は、結果 65535 を返します。 この結果は正しいです。

  • A2: =SUM(IF(B:B=0,1,0))

    セル A2 の数式は、#NUM を返します。 配列数式はセルの列全体を参照するため、エラーです。

  • A3: =SUM(IF(B1:J65535=0,1,0))

    セル A3 の数式は、結果の589815を返します。 この結果は正しいです。

    注:

    数式が約 600,000 個のセルをチェックしているため、数式の計算に長い時間がかかる場合があります。

  • A4: =SUM(IF(B:J=0,1,0))

    セル A2 の数式と同様に、セル A4 の数式は #NUM を返します。 配列数式はセルの列全体を参照するため、エラーです。

  • A5: =SUM(IF(B1:DD65535=0,1,0))

    セル A5 に数式を入力すると、次のいずれかのエラー メッセージが表示されることがあります。

    メモリが不足しています。 元に戻さずに続行しますか?

    メモリが不足しています。

    この場合、ワークシート配列のサイズが大きすぎて使用可能なメモリに対して大きすぎます。 したがって、数式を計算することはできません。

    さらに、Excel が数分間応答を停止するように見える場合があります。 これは、入力した他の数式で結果を再計算する必要があるためです。

    結果が再計算されると、Excel は期待どおりに応答します。 セル A5 の数式は、値 0 (ゼロ) を返します。

これらの数式は、以前のバージョンの Excel では機能しません。 これは、数式によって作成されたワークシート配列がすべて、以前のバージョンの Excel の上限を超えているためです。 配列を使用する Excel の関数の一部を次に示します。

  • LINEST()
  • MDETERM()
  • MINVERSE()
  • MMULT()
  • SUM(IF())
  • SUMPRODUCT()
  • TRANSPOSE()
  • TREND()

注:

関数に関する次の事実は、覚えておくと役立ちます。

  • 配列内のセルが空であるか、テキストが含まれている場合、MINVERSE は #VALUE! エラー値を返します。
  • また、配列に同じ数の行と列がない場合、MINVERSE は #VALUE! エラー値も返します。
  • 返された配列が 52 列 52 行を超える場合、MINVERSE は #VALUE! エラーを返します。
  • 出力が 5460 セルを超える場合、MMULT 関数は #VALUE! を 返します。
  • 返される配列が 73 行から 73 列を超える場合、MDETERM 関数は #VALUE! を 返します。