EXCEL関数の勉強 7

指定した数値の積を求める。行番号,列番号からセル値を求める。

一番利用されている関数に、足し算の[SUM]関数があります。では、掛け算の関数は?が。
また、行番号、列番号の座標から「セル値」を求めるのが今回の課題です。

PRODUCT 関数

書式:「 PRODUCT(数値1,数値 2,...) 」

PRODUCT関数は、指定した数値の積(掛算の結果)を求める関数です。
注釈   :引数の値を返します。
数値1注釈:数値 1,数値 2,...には積を求めたい数値を、1から30個まで指定できます。

MS-ヘルプより

解説
引数に指定した数値、論理値、数値を表す文字列は、計算に使用されますが、エラー値、数値に変換 できない文字列を引数に指定すると、エラーになります。
引数が配列またはセル範囲である場合、その中に含まれる数値だけが計算の対象となります。
配列あるいはセル範囲に含まれる空白セル、論理値、文字列、またはエラー値はすべて無視されます。

使用例
        A
  1    データ   
  2      5 
  3     15
  4     30
    数式           説明          (計算結果) 
  =PRODUCT(A2:A4)   上の数値の積を求めます       (2250) 
  =PRODUCT(A2:A4, 2)  上の数値と 2 とを乗算します    (4500)
  -------------------------------------------------------------------

補記:B 列に数値があった場合でも[A2:B4]で掛け算が成立します。また、個別指定で[A2,A4]も成立します。

SUMPRODUCT 関数

書式:「 SUMPRODUCT(配列1, 配列2, 配列3, ...) 」

注釈   :配列(計算の対象となる要素を含む)の対応する要素の積を合計した結果を返します。
配列1注釈 :配列1, 配列2,..には要素の積の合計を求めたい配列を2から30個まで指定できます。
解説
引数となる配列は、行数と列数が等しい配列である必要があります。行数と列数が等しくない場合、 エラー値 #VALUE! が返されます。数値以外の配列要素は、0 であると見なされます。

MS-ヘルプより

解説(使用例、図、解説共、表現が適宜編集し直してあります。)
SUM(A2:A7*B2:B7) という数式が「配列」として入力されていた場合、(補記:Ctrl キーと Shift キーを押しながら Enter キーを押しますと。) この使用例と同じ計算結果を得ることができます。(これは、「配列数式」です。)

(補記注意:「配列数式」にした場合のトラブル発生で、これを解除したい時、数式バーの[×]を押す以外に方法はなさそうです。 正規の終了さえ、できかねるのです。)

(上図で、配列1を「数量」、配列2を「単価」置き換えると、各行の積算をしないで、一遍に合計額が算出されることが分かります。)
配列を使用することによって、より一般的な方法で SUMPRODUCT 関数と類似の計算を実行できます。
たとえば、セル範囲 A2:A7 に入力されている要素の 2 乗の和を計算するには、SUM(A2:A7^2) という数式を入力し、 Ctrl キーと Shift キーを押しながら Enter キーを押します。(この3つのキーを押して、始めて「配列数式」になるのです。)
   -------------------------------------------------------------------------------------

SUMPRODUCT 関数は、[引数1]として指定した配列(計算の対象となる要素を含む)の対応する要素の「積」を先ず計算します。 その上で[SUM] 関数で、「和」を求め合計額を返します。前項の[PRODUCT] 関数と[SUM] 関数を組み合わせた関数です。 配列とは、データが入力されている一塊の範囲のことです。


[INDEX] 関数

書式:「 INDEX() 」

「表」や選択した「セル範囲」内での、行番号と列番号の座標を指定してデータ(値)を求める関数です。

注釈   :インデックスを使って、範囲、又は配列から抽出した値を返します。

MS-ヘルプより

テーブルまたはセル範囲にある値、あるいはその値のセル参照を返します。
INDEX 関数には、配列形式とセル範囲形式の 2 種類があります。
配列形式の戻り値は値または値の配列となり、セル範囲形式の戻り値はセル参照となります。
INDEX(配列,行番号,列番号) の形式では、配列内にある、指定したセルまたはセルの配列の値が返されます。
INDEX(範囲,行番号,列番号,領域番号) の形式では、範囲内にある、指定したセルまたはセル範囲の参照が返されます。
行番号と列番号で指定されるテーブルまたは配列の要素の値を返します。


INDEX 関数の 1 番目の引数が配列定数のときは、配列形式を使います。

書式 1 配列形式 :「 INDEX(配列,行番号,列番号) 」

(注釈)配列:インデックスを使って、範囲 または配列から抽出した値を返します。
(注釈)配列:配列には配列として入力したセル参照を指定します。
(注釈)行番号には<配列>の中にある、値を返す行を指定します。
(注釈)列番号には<配列>の中にある、値を返す列を指定します。

MS-ヘルプより

配列 セル範囲または配列定数を指定します。
配列が 1 行または 1 列のみの場合、それぞれ行番号または列番号を省略することができます。

配列が複数行および複数列で構成され、行番号または列番号のどちらか一方しか指定されていない場合、 配列の中にある行または列全体の配列が返されます。

行番号 配列の中にあり、値を返す行を数値で指定します。
行番号を省略した場合は、必ず列番号を指定する必要があります。
列番号 配列の中にあり、値を返す列を数値で指定します。
列番号を省略した場合は、必ず行番号を指定する必要があります。

解説
行番号と列番号の両方が使用されている場合は、行番号と列番号が交差する位置にあるセルの値が返されます。
行番号または列番号に 0 を指定すると、それぞれ列全体または行全体の値の配列が返されます。
配列として返される値を利用するには、INDEX 関数を配列数式として横方向のセル範囲に入力するか
、 縦方向のセル範囲に入力します。 配列数式を入力するときは、Ctrl + Shift + Enter キーを押します。
行番号と列番号には、配列内のセルを指定します。配列の範囲外のセルを指定すると、エラー値 #REF! が返されます


INDEX 関数の 1 番目の引数が範囲のときは、範囲形式を使います。

書式 2 範囲形式:「 INDEX(範囲,行番号,列番号,領域番号) 」

(注釈)    :インデックスを使って、範囲、または配列から抽出した値を返します。
(注釈)範囲  :範囲には1つ、又は複数のセル範囲への参照を指定します。
(注釈)行番号 :行番号は<配列>の中にある、参照を返す行を指定します。
(注釈)列番号 :列番号は<配列>の中にある、参照を返す列を指定します。
(注釈)領域番号:<範囲>に複数の領域が含まれている場合、どの領域から
        <行番号>と<列番号>の交点をかえすかを表す数値を指定します。

MS-ヘルプより

書式 2
指定された行と列が交差する位置にあるセルの参照を返します。
隣接しない複数のセル範囲を指定した場合、その中から任意の領域を選択できます。

セル範囲形式 書式「 INDEX(範囲,行番号,列番号,領域番号) 」

範囲 1 つまたは複数のセルの参照を指定します。
範囲として複数選択された領域を指定する場合は、範囲をかっこ () で囲み、複数選択を構成するそれぞれの領域を 半角のカンマ (,) で区切ります。
範囲で指定した各領域が 1 行または 1 列である場合、行番号または列番号はそれぞれ省略することができます。
たとえば、範囲が 1 行のみである場合は、INDEX(範囲,列番号) と指定できます。

行番号 範囲の中にあり、セル参照を返すセルの行位置を数値で返します。
列番号 範囲の中にあり、セル参照を返すセルの列位置を数値で返します。
領域番号 範囲に複数選択された領域を指定した場合、その中の 1 つの領域を数値で指定します。
指定した領域の中から行番号と列番号が交差する点にあるセルの参照が返されます。
最初に選択または入力された領域の領域番号が 1 となり、以下、2 番目の領域は 2、3 番目の領域は 3 と続きます。
領域番号を省略すると、1 であると見なされます。

たとえば、範囲として (A1:B4,D1:E4,G1:H4) のような複数選択領域が指定されている場合、 領域番号の 1 は A1:B4、領域番号の 2 は D1:E4、領域番号の 3 は G1:H4 となります。

解説
INDEX 関数では、まず範囲と領域番号を使って特定の範囲が選択され、次に行番号と列番号から特定のセルが選択されます。
行番号の 1 は選択された範囲の先頭行 (上端行) を指定し、列番号の 1 は選択された範囲の先頭列 (左端列) を指定します。
INDEX 関数が返すセル参照は、行番号と列番号が交差する点にあるセルの参照となります。
行番号または列番号に 0 (ゼロ) を指定すると、列または行全体の参照がそれぞれ返されます。

行番号、列番号、領域番号には、範囲内にあるセルまたは領域を指定します。
範囲外の対象を指定してしまうと、エラー値 #REF! が返されます。
行番号と列番号を省略すると、領域番号で指定されるセル範囲内の領域が返されます。
INDEX 関数の計算結果はセル参照となり、他の数式はこれを通常のセル参照と同様に扱います。
INDEX 関数の計算結果は、セル参照または値として使用されます。
たとえば、CELL("width",INDEX(A1:B2,1,2)) という数式は、CELL("width",B1) と同じ結果になります。
これは CELL 関数が、INDEX 関数の計算結果を通常のセル参照と同じであると解釈するためです。
一方、2*INDEX(A1:B2,1,2) のような数式では、INDEX 関数の計算結果はセル B1 に入力されている数値に変換されます。

「範囲形式」使用例 (エクセル ヘルプ例ですが、若干編集し直してあります。)
下記エクセル フアイルをダウンロードしてください。説明より実例の方が分かり易いと思います。
INDEX 関数使用例

[INDEX] 関数に[MATCH] 関数をネストして、運賃を計算する

書式:「 MATCH(検査値,検査範囲,照合の型) 」

(注釈)範囲  :または配列から値を検索して返します。
(注釈)検査値 :検査値にはテーブルから必要な項目を検索するために使用する値を指定します。
(注釈)検査範囲:検査範囲には<検査値>が入力されている、連続したセル範囲を選択します。
(注釈)照合の型:総合の型には数値 -1、0、または1を指定します。<照合の型>には<検索範囲>の 中で<検査値>をお検索する方法を指定します。

MS-ヘルプより

指定された照合の型に従って検査範囲内を検索し、検査値と一致する要素の、 配列内での相対的な位置を表す数値を返します。
検査値で指定したセルに含まれる値ではなく、検査値の範囲内での位置を調べる場合は、 その他の検索/行列関数の代わりに、MATCH 関数を利用してください。

検査値 表の中で必要な項目を検索するために使用する値を指定します。
検査値には、実際に検索する値ではなく、検査範囲の中で照合する値を指定します。 たとえば、電話番号帳を使ってある人の電話番号を調べるとき、検査値としてその人の氏名を指定しますが、 実際に検索するのは電話番号です。

検査値には、数値、文字列、論理値、またはこれらの値に対するセル参照を指定できます。
検査範囲は、検査値を含む隣接したセル範囲を指定します。 検査範囲は、配列または配列に対するセル参照を指定してもかまいません。

照合の型 -1、0、1 の数値のいずれかを指定します。照合の型には、検査範囲の中で検査値を 探す方法を指定します。
照合の型に 1 を指定すると、検査値以下の最大の値が検索されます。
このとき検査範囲のデータは、昇順に並べ替えておく必要があります。
昇順の並べ替えでは、数値は 1 ? 9、アルファベットは A ? Z、かなは "あ" ? "ん"、 ブール型の値は FALSE から TRUE に配置されます。
照合の型に 0 を指定すると、検査値に一致する値のみが検索の対象となります。 このとき検査範囲を並べ替えておく必要はありません。
照合の型に -1 を指定すると、検査値以上の最小の値が検索されます。 このとき検査範囲のデータは、降順に並べ替えておく必要があります。 降順の並べ替えでは、数値は 9 ? 1、アルファベットは Z ? A、かなは "ん" ? "あ"、ブール型の 値は TRUE から FALSE に配置されます。
照合の型を省略すると、1 を指定したと見なされます。

解説
MATCH 関数では、指定したセルに含まれている値ではなく、 検査範囲内にある検査値に一致する値の【位置】が返されます。
たとえば、MATCH("b",{"a","b","c"},0) は 2 を返します。 これは、配列 {"a","b","c"} の中での "b" の相対位置を表します。
MATCH 関数では、英字の大文字と小文字は区別されません。 検査値が見つからない場合は、エラー値 #N/A が返されます。
照合の型に 0 を指定し、検査値が文字列の場合、検査値の中で、アスタリスク (*)、 疑問符 (?) のワイルドカード文字を使うことができます。
ワイルドカード文字のアスタリスクは任意の文字列を表し、疑問符は任意の 1 文字を表します。

  使用例

      A     B 
  1  製品    個数 
  2  バナナ   25 
  3  オレンジ  38 
  4  リンゴ   40 
  5  ナシ    41 
     数式               説明             (計算結果) 
  =MATCH(39,B2:B5,1)   B2:B5 のセル範囲から 39 を検索しますが、一致する値がないため、
                           この値以下の最大の値 38 の位置が返されます  計算結果 (2) 
  =MATCH(41,B2:B5,0)   B2:B5 のセル範囲から 41 の位置を調べます   計算結果 (4) 
  =MATCH(40,B2:B5,-1)   B2:B5 のセル範囲は降順に並べ替えられていないため、エラーが返されます (#N/A)
   (下記フアイルにあります。) 

エクセル フアイルです。宜しかったら、ダウンロードしてください。
INDEX(MATCH) 関数使用例

上記表解説

書式 2 範囲形式:「 INDEX(範囲,行番号,列番号,領域番号) 」

(注釈)    :インデックスを使って、範囲、または配列から抽出した値を返します。
(注釈)範囲  :範囲には1つ、又は複数のセル範囲への参照を指定します。
(注釈)行番号 :行番号は<配列>の中にある、参照を返す行を指定します。
(注釈)列番号 :列番号は<配列>の中にある、参照を返す列を指定します。
(注釈)領域番号:<範囲>に複数の領域が含まれている場合、どの領域から
        <行番号>と<列番号>の交点をかえすかを表す数値を指定します。
---------------------------------------------------

書式:「 MATCH(検査値,検査範囲,照合の型) 」

(注釈)範囲  :または配列から値を検索して返します。
(注釈)検査値 :検査値にはテーブルから必要な項目を検索するために使用する値を指定します。
(注釈)検査範囲:検査範囲には<検査値>が入力されている、連続したセル範囲を選択します。
(注釈)照合の型:総合の型には数値 -1、0、または1を指定します。<照合の型>には<検索範囲>の 中で<検査値>をお検索する方法を指定します。
---------------------------------------------------

上記の図式です。
数式:「 =INDEX(B3:G8,MATCH(A11,A3:A8,0),MATCH(B11,B2:G2,0)) 」
(1)=INDEX(                                            )
(2)       B3:G8,
(3)             MATCH(A11,A3:A8,0),
(4)                                MATCH(B11,B2:G2,0)
(5)省略

解説      範囲形式:INDEX(範囲,行番号,列番号,領域番号
(1)INDEX 関数(                                                       )

(2)範囲 [B3]〜[G8]

(3)MATCH 関数をネスト(行を検索する)
(3-1)  検査値   [A11]
(3-2)  検査範囲      [A3]〜[A8]
(3-3)  照合の型 (0は[検査値]と一致) [0]  

(4)MATCH 関数をネスト(列を検索する)
(4-1)  検査値               [B11]
(4-2)  検査範囲                  [B2]〜[G2]
(4-3)  照合の型 (0は[検査値]と一致)             [0] 

(5)領域番号    (省略の場合は第1選択範囲の[1]と見做す)    [省略]

CHOOSE 関数

書式:「 CHOOSE(インデックス,値 1,値 2,...) 」

(注釈)      :インデックスを使って、引数リストから特定の値を1つ選択します。
(注釈)インデックス:インデックスには引数リストの値の位置を表す数値を指定します。
(注釈)値1     :値1,値2には1から29個の引数を指定します。ここからインデックスで指定した値が返されます。

MS-ヘルプより

値のリストから指定した値を取り出します。CHOOSE 関数を利用すると、 インデックスに指定した番号に基づいて、最大 29 個の値の中から 1 つの値だけを選択できます。
たとえば、値 1 から値 7 が 1 週間の曜日になっている場合、インデックスとして 1 から 7 までの任意の数値を指定すると、いずれかの曜日が返されます。

インデックス 引数リストの何番目の値を選択するかを指定します。インデックスには、 1 〜 29 までの数値、または 1 〜 29 までの数値を返す数式またはセル参照を指定します。
インデックスが 1 の場合は値 1 が返され、2 の場合は値 2 が返されます。インデックスと値との関係は、以下についても同様です。
インデックスが 1 より小さいか、引数リストの値の個数よりも多い場合、エラー値 #VALUE! が返されます。
インデックスに小数点以下の値が含まれていても、整数部分だけが計算に使われます。
値 1,値 2,... インデックスに基づいて選択される値または動作を 1 〜 29 個まで指定します。 これらの引数には、数値、セル参照、名前、数式、関数、または文字列を指定できます。

解説
インデックスが配列の場合、CHOOSE 関数によって検証されるときに、すべての値が選択されます。
CHOOSE 関数に指定する値として、1 つの値だけでなく、セル範囲への参照を使うこともできます。
たとえば、次の数式は
=SUM(CHOOSE(2,A1:A10,B1:B10,C1:C10))
次のように計算され
=SUM(B1:B10)
計算結果として返される値は、セル範囲 B1:B10 に含まれる値の合計になります。
この数式では、まず最初に CHOOSE 関数が計算され、セル範囲 B1:B10 が返されます。 次に、SUM 関数が、CHOOSE 関数の結果であるセル範囲 B1:B10 を引数として合計を計算します。


   ---------------------------------------以上、MS-ヘルプより
上図の「数式3」の「 =SUM(A13:CHOOSE(3,A13,A14,A15)) 」で、 「CHOOSE(3,A13,・・・」の[A13]を除き、インデックスを[2]にし、「 =SUM(A13:CHOOSE(2,A14,A15)) 」としても、同じ結果になります。 (どうやら、[A13]は重複のように思われますが。? 詳しいことは分かりません。)

CHOOSE 関数の特徴

1.[範囲選択(指定)]が、ありません。
2.セル1個づつの個別指定になります。個別指定ですから、不連続セルでもOKです。
3.29個の引数(セル値)が指定できます。
4.値を数個指定した(並べた)内から「何番目」かを取り出す数値を示すのが、「インデックス」です。


トップへ戻る     いろいろな関数目次へ戻る
関数の勉強6へ戻る     関数の勉強8へ進む

inserted by FC2 system