2009年5月6日水曜日

表計算で入力に応じて計算の範囲を変化させる - 「範囲を返す」 OFFSET 関数と「データ数を数える」 COUNT 関数を用いて

1. 入力に応じて計算対象の範囲を指定したい

090505-015例えば、A 列に「テストの得点」を入力する列がある。

テストの得点は、下方向へ入力していく。この入力に応じて「平均」を計算するための「範囲」が変化し、計算が行われるようにしたい。

平均を計算するとき、以下のように列まるごと対象にした式を書くことはできる。

=AVERAGE(A:A)

ここでは、列全体を AVERAGE 関数に与えるのではなく、入力された範囲を引数に与えるようにしたい。

 

2. COUNT 関数でデータ数を得る

最初に、データ数をカウントするための

  • COUNT 関数

について確認する。Excel のヘルプによると、

  • COUNT 関数では、数値、日付、数値を表す文字列が計算の対象となります。エラー値、数値に変換できない文字列は無視されます
  • 090505-015よって、A 列にあるデータ数を得るには、

    =COUNT(A:A)

    このとき、先頭の見出しの文字列はカウントされない。

    D2 セルに上記の式を記述し、そのセルを「データ数」と名付けた。

     

    3. OFFSET 関数で計算対象の「範囲」を得る

    次に、計算対象の「範囲」を取得する。そのためには、OFFSET 関数を利用する。

    OFFSET の意味は、オフセットとは 【offset】 - 意味・解説 : IT用語辞典 によると、

    あるデータの位置を、基準点からの差(距離)で表した値のこと。

    この意味からは、範囲を返す関数であることは分からない。関数の名前が良くないと思う。

    Excel のヘルプによると、

    基準のセルまたはセル範囲から指定された行数列数だけシフトした位置にある高さのセルまたはセル範囲の参照 (オフセット参照) を返します。

    使い方は 「[XL2002] OFFSET 関数の使用方法」 を参照。

    OFFSET 関数の引数をイメージしやすいように図にしておく。

    090506-017

    表は、基本的に「行 → 列」という順序で考えるのが普通。よって、引数の並びとして、「行数」「列数」が並んでいるので覚えやすい。「高さ」「幅」というのは、言い換えれば、「対象となる行のデータ」と「対象となる列のデータ」ということ。これも「行 → 列」という順序に並んでいると見なせる。

    今回は OFFSET の意味に相当する引数「行数、列数」は考えない。必要なのは、基準となるセルとそこからの範囲指定を行うための「高さ」と「幅」。

    OFFSET 関数を適用する前に、セル A2 を「データの先頭」と名付けた。平均を計算するため、セル D3 に次のように記述。

    =AVERAGE(OFFSET(データの先頭,0,0,データ数,1))

    090505-014

     

    セルに名前を付けず、途中の計算も書かないで書くなら、

    =AVERAGE(OFFSET(A2,0,0,COUNT(A:A),1))

    となる。