2−3 一覧表の参照

 ここでは一覧表から目的のデータを探し出したり、データの集まりから1つのデータを抜き出すために使うう関数について解説します。

 

■テーブル参照

 規則正しく一覧形式でセル範囲に入力されたデータの集まりをテーブルといいます。テーブルにしたデータの中からデータを抜き出す(参照する)ことをテーブル参照といい、条件を指定して目的のデータを探し出して抜き出すことができます。ここでは、テーブル参照を行うVLOOKUP関数とHLOOKUP関数の使い方を解説します。

 

1.VLOOKUP関数で使うテーブル

 あるデータをテーブル形式で入力すると図Aのようなスタイルになることでしょう。このテーブルのセル範囲は、上部に入力した項目名を省いたセル範囲になります。項目名の行を含めると、項目名も検索やデータ抽出の対象になってしまうので注意が必要です。図Aの場合、セル範囲はB5:E11になります。セル範囲は、Part1で解説しているように範囲名を付けて範囲名を引数に使うことができます。

 

[A]テーブルに指定するセル範囲「B5:E11」

 

図A

 EX4A155Z

     ↑   ↑        

                              列番号(抽出列)

 

●VLOOKUP関数

 関数の書き方は以下のようになっています。引数[検索値][列番号][検索の型]は関数内に直接入力することができます。以下のHLOOKUP関数で説明していますが、[範囲]も配列定数を使ってデータを直接入力することができますが、入力内容が多くなりすぎるので実際的ではありません。

 

書式     VLOOKUP(検索値, 範囲, 列番号, 検索の型)

 

検索値      検索する値を指定する

範囲        テーブル(セル範囲、あるいは範囲名)を指定する

列番号      抽出するデータの列を指定する

検索の型    検索方法を論理値で指定する。

                指定値   検索方法

                FALSE   完全に一致する値を検索。見つからない場合、エラー値#N/Aを返す

                TRUE    近似値で検索(省略値)

 

列番号が1より小さいとき、エラー値 #VALUE! が返されます。列番号が範囲の列数より大きいときは、エラー値 #REF! が返されます。検索はテーブル範囲の先頭列が対象になります。先頭列が文字列の場合、英字の大文字と小文字は区別されません。検索列(範囲の左端の列)のデータは、文字列、数値、論理値のいずれでもかまいません。

 

使用例

 図Aのテーブルを使ったVLOOKUP関数の使用例を示します。検索値をセルG15に入力して、検索の型をセルI15に入力している場合の書き方は以下になります。絶対セル番地にしているのは複写を利用できるようにするためです。

 

=VLOOKUP($G$15,$B$5:$E$11,2,I15)

           ↑      ↑       ↑  ↑

          検索値    テーブル    抽出列 検索の型

 

 検索の型はセルI15に半角文字で「TRUE」を入力して、関数にはセル参照(I15)を入力しています。関数に直接入力する場合は、以下のようにします。

 

=VLOOKUP($G$15,$B$5:$E$11,2,TRUE)

 

 次の操作例は、セルG15に入力している商品コードに対応する商品名をVLOOKUP関数で抽出しています。検索の型はセルI15に「TRUE」を入力して、そのセルを参照するようにしています。

 

r>操作

@セルH15に数式を入力する

[A]商品コードA−100の商品名が抽出される

 

商品コードは、テーブルに入力しているとおり、全角と半角を取り違えないように入力することが必要です。

 

 EX4A323Z

 

 EX4A324Z

 

検索値(セルG15)に値を入力していない場合は#N/Aが表示されますが、値(図ではA−100)を入力すれば結果(アンパン)が表示されます。検索の型(セルI15)を入力していない場合は、省略になり、検索の型を省略したときはTRUEとみなされるので、同じ結果が得られます。関数内で省略するときは、TRUE前部のカンマ「,」も省略します。以下の関数をセルH17に入力して確認してみましょう。

 

=VLOOKUP($G$15,$B$5:$E$11,2)

 

r>操作

@セルH17に数式を入力する

[A]同じ結果が得られる

 

 EX4A325Z

 

 EX4A326Z

 

 

●正しく検索されない

セルG15に入力している商品コードをB−050に書き替えてみましょう。正しく検索されると商品名「食パン」が抽出されるはずです。

 

r>操作

@セルG15に「B−050」を入力する

[A]「栗アンパン」が抽出される

 

 

正しい結果が抽出されないのは、検索の型にTRUE(あるいは省略)を指定しているからです。TRUEは近似値を検索するので、一致するデータがないとき最も近い値を検索します。しかし、「B−050」はデータの中に存在しています。近似値の検索は上から順に検索して最も近い値を探しだすので、検索されるデータを昇順で規則正しく並べておくことが必要なので、このような現象が起こります。この動作を簡単に解説しておきましょう。まず、上から順にB−050を探し出し始めます。1つ目がA−100、2つ目がA−120、と検索して、3つ目にF−030が見つかりました。A−XXXの次がF−XXXなので、これ以降にA−XXXの次にあるべきB−XXXは存在しない、と判断されて、A−120が近似値として抽出されたことになります。検索値を越えない最も近い値を抽出するので、F−030ではなく、A−120が抽出されます。

 

 EX4A327Z

 

 

●完全一致を検索する

検索の型をFALSEに指定すれば、上記の現象を避けることができます。FALSEを指定した関数で試してみましょう。セルI16にFALSEを入力して、セルH16に数式を入力する場合、次のようになります。以下の操作では数式を入力していますが、先に入力したセルH15の数式は、複写できるように絶対セル番地と相対セル番地をうまく利用しているので、セルH15に入力した数式をセルH16に複写しても構いません。

 

=VLOOKUP($G$15,$B$5:$E$11,2,I16)

 

また、FALSEを関数に直接入力すると次のようになります。

 

=VLOOKUP($G$15,$B$5:$E$11,2,TRUE)

 

r>操作

@セルH16に数式を入力する

AセルI16に「FALSE」を入力する

[A]期待した値が抽出される

 

検索の型にFALSEを指定した場合、検索値に存在しない値を指定するとエラー#N/Aが表示されます。試しにセルG15にB−051を入力してみてください。FALSEを指定しているセルH16の関数では#N/Aになります(図B)。

 

 

 

 

 

 

 

 

 

 

 EX4A328Z

 

 

 EX4A329Z

 

r>操作

@セルG15の検索値を「B−051」に書き替える

[A]FALSEの関数はエラーを表示する

 

 EX4A330Z

 

検索の型にTRUEを指定している関数ではエラー表示はなく、近似値が抽出されています。

 

●検索の型「TRUE」と「FALSE」

検索の型をTRUE、FALSEのどちらを使うのかは、目的により使い分けることになりますが、判断基準として次のことが上げられます。

 

TRUE 数値の検索に適している

                一致するデータがなくてもエラーを表示させたくないとき

                テーブルのデータを昇順で並べ替えてもよいデータ

 

FALSE       文字の検索に適している

                一致するデータがないときエラーを表示させて明示する

                テーブルのデータを並べ変えたくない

 

 

[テーブルのソート]

先の例のように、検索の型にTRUEあるいは省略している場合、データが昇順で並んでいないと正しく検索されません。データの並べ替え(ソートという)はデータのセル範囲を選択状態にして、ツールバーの[昇順で並べ替え]ボタンをクリックします。昇順の並べ替えでは、数値は1〜9、アルファベットはA〜Z、かなは""""、漢字はJISコード順、日付は古い順に配列されます。

 

r>操作

[A]正しく抽出されていない

@データ範囲を選択状態にする

A[昇順で並べ替え]ボタンをクリックする

[B]データの並べ替えが行われる

[C]正しく抽出される

 

並べ換え直後はデータ範囲が選択状態のままなので、他のセルをクリックして解除します。

 

 EX4A157Z

 

 EX4A158Z

 

 

4.HLOOKUP関数

テーブルの方向が横向き、つまり列方向にデータが並んでいるテーブルの場合にHLOOKUP関数を使います。テーブルの向きが違っているだけで、VLOOKUP関数とまったく同じ働きをします。

 

 

 EX4A160Z

 

C9  :=HLOOKUP(B9,$C$3:$I$6,2,FALSE)

 

書式     HLOOKUP(検索値, 範囲, 行番号, 検索の型)

 

検索値  検索する値を指定する

範囲    テーブルを指定します。

列番号  抽出するデータの行を指定する

            行番号が1より小さいときは、エラー値 #VALUE! が返され、

            行番号が範囲の行数より大きいときは、エラー値 #REF! が返されます。

検索の型 検索方法を論理値で指定する。

                        指定値   検索方法

                        FALSE   完全に一致する値を検索。見つからない場合、エラー値#N/Aを返す

                        TRUE    近似値で検索(省略値)

 

 

【まとめ】

●商品コードのような文字を検索するときは、検索の型を「FALSE」にする

●数値で一致あるいは近似値を検索するときは、検索の型を「TRUE」あるいは省略する

VLOOKUP       範囲の先頭列を検索し、該当した行の指定されたセルの値を返します。

HLOOKUP       範囲の先頭行を検索し、該当した列の指定されたセルの値を返します。

 

 


■エラーの検査とエラー表示#N/Aを消す

関数の返す値にエラー#N/Aがあります。たとえば、VLOOKUP関数で検索値が見つからなかったときに、あるいは検索値を入力していない状態のときに表示されます。エラー表示の結果をそのまま使って、入力ミスなどの目安として使うのも一つの方法ですが、エラー表示が目障りなときは、IF関数とエラーを調べる関数を組み合わせて非表示にすることができます。

 

ISERROR       対象となる値がエラー値のときTRUEを返します。

ISNA          対象となる値がエラー値#N/AのときTRUEを返します。

NA            常にエラー値#N/Aを返します。

 

1.エラーを検査する関数

数式の結果がエラーなのかを調べるには、ISERROR関数を使います。

 

●ISERROR関数

 この関数は、数式が返すすべてのエラーを検査することができます。検査の方法は以下のように検査する数式をISERROR関数で囲むように入力します。

 

書式     ISERROR(数式)

 

数式     テストする数式を指定する

 

この関数の出力結果は論理値TRUE/FALSEで返されます。たとえば、数式がエラー(#N/Aなど)を出力すると、ISERROR関数はTRUEを返します。数式がエラーでないときは、FALSEが返されます。

 

使用例1

たとえば、数式1+1は計算式としては正しく、結果は2が返されるのでエラーになりません。この数式をISERROR関数で検査してみましょう。書き方は以下のようになります。

 

        =ISERROR(1+1)

              ↑

             ここに検査する数式を入力する

 

数式(1+1)だけをセルに入力するときは、先頭に=を付けて「=1+1」を入力しなれけばなりませんが、関数内に入力するときは=を付けません。考え方として、すでに関数の前に=を付けているので1+1だけを入力する、と理解すればいいでしょう。

 

r>操作

@セルC19に数式を入力する

[A]エラーでない印としてFALSEが表示される

 

  

EX4A331Z                  EX4A332Z

 

使用例2

数式を1+Aにして検査するとどうなるでしよう。Aは数値でないので、計算できません、というエラーになります。エラー表示「#NAME?」は、{「A」という名前の関数や範囲名がありません、何の名前ですか}という意味のエラーです。次の操作で、このエラー表示を試しておきましょう。

 

r>操作

@セルC21に数式 =1+A を入力する

[A]エラーが表示される

 

  

EX4A333Z                  EX4A334Z

 

●検査する数式をセル参照で指定する

ISERROR関数も通常の関数と同じように、引数つまり検査対象の数式をセル参照で指定することができます。先のセルC21に入力した数式を検査してみましょう。次の書き方になります。

 

        =ISERROR(C21)

 

r>操作

@セルC23にISERROR関数を入力する

[A]検査結果が表示される

 

   

EX4A335Z                EX4A336Z

 

セルC21に入力した数式にエラーが発生していることを示すTRUEが返されます。検査結果をまとめると次のようになりますね。

 

数式にエラーがあるとき     TRUE  を返す

数式にエラーがないとき FALSE を返す

 

このTRUEとFALSEでエラーの有無を判断することができます。ISERROR関数は表Aのエラーを判断してTRUEを返します。表Aのエラーは数式が返すすべてのエラー種です。

 

表A

エラー種 エラーの意味

#N/A          数式に使用できる値がない

#VALUE!       引数の種類が正しくない

#REF!         数式中のセル参照が無効

#DIV/0!       数式で0(ゼロ)による除算が行われた

#NUM!         数式または関数の数値に問題がある

#NAME?        範囲名や関数名が認識できない

#NULL!        セル範囲に共通部分がない

 


2.IF関数と組み合わせる

 以前にIF関数は、条件が成立したときの処理と不成立のときの処理を使い分ける、と解説しましたが、実は、IF関数では成立のことをTRUE、不成立のことをFALSEに置き換えて、2つの処理を選択しています。

 

        IF(条件,成立したときの処理,不成立のときの処理)

              ↓

        IF(条件,TRUEのときの処理,FALSEのときの処理)

 

ISERROR関数はTRUEまたはFALSEのどちらかを返す、つまり出力するので、IF関数の条件に入力すると2つの処理を使い分けることができるようになります。

 

        =IF(ISERROR(数式),TRUEのときの処理,FALSEのときの処理)

 

このIF関数を前項のVLOOKUP関数に応用すれば、図Aのようになります。非常に長い数式になってしまいます。

 

=IF(ISERROR(VLOOKUP($G$15,$B$5:$E$11,2,I16)),"",VLOOKUP($G$15,$B$5:$E$11,2,I16))

             ↑             ↑     ↑

          @エラー検査           TRUE        AFALSE

 

この数式を使ってエラー表示を非表示にできますが、エラーを検査するための@と、結果を求めるためのAの同じVLOOKUP関数を2つも入力する無駄があります。

 

図A

 EX4A337Z

 

2つのVLOOKUP関数はまったく同じものなので、他のセルに入力して、セル参照に置き換えることができます。たとえば、VLOOKUP関数をセルK16に入力して、セルH16には数式をセル参照で入力すればすっきりとした数式になります。

 

セルH16 =IF(ISERROR(K16),"",K16)

セルK16 =VLOOKUP($G$15,$B$5:$E$11,2,I16)

 

セルK16にはエラーが表示されますが、少し離れた場所に入力しておく、あるいは列(ここではK列)を非表示にする、などの処理を施してエラーを見えないようにします。

 

r>操作

@セルK16にVLOOKUP関数を入力する

AセルH16の数式を書き替える

[A]エラーは非表示

[B]該当する品名があれば表示される

 

線吹き出し 3: @

 


 EX4A356Z

 

線吹き出し 3: A

 


 EX4A357Z

 

線吹き出し 3: [A]

 


  

EX4A358Z                    EX4A359Z

 

エラー#N/Aの検査にISERROR関数を使いましたが、#N/Aだけの検査を目的にするなら、ISNA関数で検査することができます。

 

●ISNA関数

エラー「#N/A」を検査して、エラーのときTRUE、エラーでないときFALSEを返す。

 

書式     ISNA(数式)

 

数式     検査する数式、あるいは数式が入力されているセル番地を入力する

 

使用例

これまでのIF関数に使ったISERROR関数をISNA関数に置き換えると、以下のようになります。

 

        =IF(ISNA(K16),””,K16)

 

また、エラーを擬似的に出力するために=1+Aを使いましたが、常にエラー値#N/Aを返すNA関数があるので、先のセルC21に=NA()を入力して#N/Aを出力させることができます。このエラー値を出力する関数は、エラーを擬似的に出力させて数式をチェックするときなどに利用します。

 

●NA関数

常にエラー値#N/Aを返す。

 

書式     NA()

 

引数はありませんが、括弧()は入力する必要があります。

 

 

【まとめ】

●数式のエラーをチェックするときはISERROR関数を使う

●数式が出力するエラーの中で#N/Aだけをチェックするときは、ISNA関数を使う

●数式の作成中などで擬似的にエラー発生を行うときは、NA関数を使う

●IF関数の条件成立はTRUE、不成立はFALSEで表す

 

 

 

 


■テーブルの検索

先のテーブル参照で解説したVLOOKUP関数などと同じように規則正しく並べたデータの中から指定する値を検索して、データ抽出する関数にLOOKUP関数とMATCH関数があります。

 

LOOKUP関数       テーブル形式のデータを検索して抽出する(テーブルの方向は自動判別)

MATCH関数        テーブル形式のデータを検索して該当するデータの番号を返す

 

 

●LOOKUP関数

行または列で構成されるセル範囲(配列でも可)に含まれる値を検索する。ベクトル形式と配列形式の2種類があります。

 

[配列形式]

配列形式では、データを一覧表形式で入力テーブルの先頭列を検査して、一致する値を見付けると、テーブルの右端のセルに入力されている値を返します。テーブルが横に長いときは、行方向に検索されるので、列を行に読み替えてください。

 

書式     LOOKUP(検査値, 配列)

 

検査値   検索する値を指定します

配列     検索値と抽出データが揃っているテーブルを指定します。

 

このLOOKUP関数はテーブルのサイズにより縦(VLOOKUP関数(先頭列を検索)に類似)、と横(HLOOKUP関数(先頭行を検索)に類似)が自動的に決定されます。テーブルの方向が決まっているときは、VLOOKUP関数やHLOOKUP関数を使うようにしましょう。

 

使用例

次の例は、検索するデータをセルE3に入力して、テーブル(セルB6:C11)を検索して目的のデータを抽出しています。入力する数式は以下のようになります。

 

        =LOOKUP(E3,B6:C11)

            ↑    ↑

           検査値   配列

 

r>操作

@セルF3に数式を入力する

[A]検査値を指定していなので#N/Aが返される

AセルE3に検査値を入力する

[B]検索結果が表示される

 

 

 

EX4A968Z                    EX4A969Z

 

 EX4A970Z

 

 

[ベクトル形式]

指定するデータの並び(行または列方向に並ぶデータ)から検査値を検索して、見つけた位置(ベクトルという)と、対応範囲の同じ位置のデータを返す働きをします。

 

書式     LOOKUP(検査値, 検査範囲, 対応範囲)

 

検査値           検索する値を指定する

検査範囲 行または列のセル範囲を指定する

対応範囲 抽出するデータの一覧(セル範囲)を指定する

 

検査範囲に入力する値は、文字コード順の昇順に配置されている必要があります。そうでない場合、LOOKUP関数では正しい値を見つけることができません。また、英字の大文字と小文字は区別されません。この関数は検査値のデータと抽出するデータの入力位置が離れているときに役立ちます。

 

使用例

次の例は先の配列形式の例を使ってベクトル形式の検索を行っています。対応範囲として、社員名の一覧を指定して、テーブルデータに対応する社員を抽出しています。入力する数式は以下のようになります。

 

        =LOOKUP(E3,B6:C11,C14:C19)

            ↑    ↑       ↑

           検査値   配列     対応範囲

 

r>操作

@セルG3にベクトル形式の数式を入力する

[A]検査で見付けた位置と同じ位置のデータが抽出される

 

 EX4A971Z

 

 EX4A972Z

検査値「C」は3つ目にある、したがって抽出データも3つ目の「山口」が抽出される

 

 

●MATCH関数

テーブル形式のデータ範囲内を検索して、位置するデータの相対的な位置(先頭から何番目)を表す数値を返します。

 

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

 

検査値           検索する値を指定します。

検査範囲 検索する範囲を指定します。

照合の型 検査値を探す方法を指定します。

                照合の型 検査内容

                 1(省略)      検査値以下の最大の値を検索(データは昇順)

                 0             検査値に一致する値を検索(データ並べ替えは不要)

                 −1           検査値以上の最小の値を検索(データは降順)

 

使用例

次の例は、検索値をデータの一覧から検索して、先頭から何番目のデータなのかを求めています。入力する数式は以下のようになります。

 

        MATCH(D4,B4:B11,)

             ↑           

              検査値   検査範囲   照合の型

 

r>操作

@セル数式を入力する

[A]検査値と一致するデータの番号が求められる

 

 

例では、検索値「1500」は上から4番目に位置するので4が返されています。

 

 

 

 

 

 

 

  

EX4A973Z                  EX4A974Z

 

 

【まとめ】

●LOOKUP関数を使うと、テーブルの方向が自動的に判別される

●MATCH関数はデータ並びから目的のデータが何番目に位置するのかを返す。

 

 


■縦と横の交点

一覧表内のデータを縦と横、つまり、列と行を指定したセル位置のデータを参照するようなときは、INDEX関数を使ってデータの抽出ができます。この関数は、行と列の番号で抽出するデータ位置(セル位置)を指定するので、VLOOKUP関数のように検索条件を指定することはできません。行と列を検索で指定する場合は多少の工夫が必要です。

 

 

1.行と列を指定する

一覧表内のデータを参照する操作例として、図Aの表を使うことにします。上側の行と左側の列に連続番号を振っていますが、この番号がそれぞれ縦(列)と横(行)の番号に相当します。標題に「前期 販売履歴簿」としていますが、後ほどこの集計表をそれらしく作り替えます。まず、INDEX関数について載せておきます。

 

●INDEX関数

一覧表内の縦と横の位置を指定してデータ抽出を行う。

 

書式     INDEX(範囲,行番号,列番号,領域番号)

 

範囲             データを入力しているセル範囲を指定する

行番号           抽出するセルの行位置を数値で指定する

列番号           抽出するセルの列位置を数値で指定する

領域番号 範囲に複数の領域を指定した場合に、どの領域を使用するのかを数値で指定する

 

 

引数[範囲]にセル範囲を複数指定する場合は、かっこ()と半角のカンマ(,)で次のように指定します。

 

        INDEX((A1:B4,D1:E4,G1:H4),行番号,列番号,領域番号)

         ↑  ↑   ↑

    領域番号 1  2   3

 

複数の範囲を指定した場合、どのセル範囲(領域)を使うのかを引数[領域番号]で指定することが必要になります。上記の場合、領域番号=1A1:B4、領域番号=2D1:E4、領域番号=3G1:H4になる。なお、領域番号を省略すると、1であると見なされます。1つの領域を範囲に指定した場合は、以下のように領域番号を指定する必要はありません。

 

        INDEX(A1:B4,行番号,列番号)

 

行番号、列番号、領域番号は、範囲内にあるセルまたは領域(行数、列数)を指定します。範囲を越えて指定すると、エラー値#REF!が返されます。

 

使用例

 図Aの一覧表の場合で考えると、INDEX関数で指定するデータ範囲はD6:H11になります。セル範囲の上側と左側に番号を振っているのは、INDEX関数で指定する行と列番号を分かりやすくするためなので、データ範囲に含めません。行の指定をセルG14、列の指定をセルG15で行うとすると、関数は次のようになります。

 

            =INDEX(D6:H11,G14,G15)

                 ↑     ↑   ↑

                 範囲  ,行番号,列番号

 

r>操作

@セルG16に数式を入力する

 

図A

 EX4A263Z

 

関数を入力すると、エラー#VALUEが表示されます。これは、まだ行と列番号を指定していないからです。また、行に番号を入力すると、列を指定していないのに値が抽出されます。行と列番号を指定すると正しい値が抽出されます。図[C]の例では表の3行目と2列目の交点の値が抽出されていることになります。

 

r>操作

[A]関数の入力直後はエラー#VALUE

[B]目的の行番号を入力すると正しくない値が表示される

[C]行と列番号を指定すると正しい値が抽出される

 

[A]             [B]             [C]

  

EX4A264Z           EX4A265Z           EX4A266Z

 

正しく抽出していないときエラー表示されていれば、行と列番号を指定していない、と判断できますが、行だけを指定して値が抽出された場合、間違いに気付かずに作業を進める危険性があります。次にこの解決方法を解説します。

 

 

2.指定値の未入力をチェックする

引数をセル参照で行う場合、参照先が空(未入力)のとき数値0および空(””)のどちらかで判断することができます。INDEX関数の引数[行番号]と[列番号]は1から始まるので値0のとき指定なし、と判断できるので、数値0と空白のどちらでも処理できますが、ここでは値0を使った処理方法を解説します。何かの状態を判断するときはIF関数を使いますが、チェックする内容が2つあるので、OR関数も組み合わせて未入力をチェックする数式を作ります。IF関数の詳細は前項P___を参考にしてください。1つのIF関数で複数の状態をチェックする場合は複数の比較式を組み合わせるOR関数を使って入力します。

 


●OR関数

OR関数は複数の比較式(条件式)の1つでも成立したとき、成立(論理値TRUE)を出力する働きをします。書き方は、以下のようになります。必要な数だけ比較式をカンマ「,」で区切って入力します。

 

書式     OR(比較式1,比較式2,・・・)

 

比較式1,比較式2, ...      成立(TRUE)か不成立(FALSE)を調べる比較式を指定する

 

カンマで区切って記述できる引数は最大30個までです。引数に文字列または空白セルが含まれる場合、これらの値は無視されます。指定した範囲に比較式が含まれていない場合は、エラー値#VALUE!が返されます。

 

 

使用例

ここでの場合で考えると、セルG14とG15のどちらかでも値0のときINDEX関数を実行しない、にすればいいので、セル内容=0を比較する式を使って以下のようにします。

 

        OR(G14=0,G15=0)

 

これをIF関数に組み込めば次のようになります。

 

        =IF(OR(G14=0,G15=0),””,INDEX(D6:H11,G14,G15))

 

この数式をセルG16に入力し直すと、行と列の両方を入力するまで結果が表示されなくなります。

[A]数式を書き替える

[B]列の指定を削除すると、結果も表示されなくなる

 

 EX4A267Z

 EX4A268Z

 

 

3.行と列番号を検索値で指定する

先の方法では、行と列の番号でデータ位置を指定しましたが、番号ではなくて列や行に項目名を付けて、その名前で指定することができれば、単純な番号指定よりも分かりやすくなります。INDEX関数は番号指定の機能しか持たないので、検索値で値を抽出できるVLOOKUP関数やHLOOKUP関数を利用して、INDEX関数に指定する番号を検索する処理を付け加えてみましょう。

 

作成手順

 さて、どこから書き始めればいいのでしょう。

 

 

●項目名を付ける

図のように一覧表の列と行に項目名を付け足して、この項目名でデータを抽出することにします。

 

r>操作

@各列に項目名を入力する(ここでは社員名)

A各行に項目名を入力する(ここでは月数)

 

 EX4A958Z

 

 

●行番号の検索

まず、INDEX関数に指定する行番号を項目名で抽出してみましょう。各行の項目名[1月]〜[6月]と右横の番号(行番号)をよく見れば、この2列で1つのテーブルのスタイルになっています。そこで、テーブル参照に使うVLOOKUP関数にあてはめてみると、以下のようにできます。

 

r>操作

@検索値を入力セルを決めて、そこにサンプルを入力する

A行番号を入力するセルにVLOOKUPを利用した数式を入力する

[A]指定した項目名の行番号が求められる

 

セルE14に入力している項目名を変更すれば、セルG14の行番号が更新されるかを確かめておきます。

 

 

 

 EX4A959Z

 

 

 

 

 

 

 


 EX4A960Z

 

●列番号の検索

行番号の検索と同じことですが、テーブルに見立てて使うデータ(列番号と社員名)は横に並んでいるので、テーブル参照に使う関数はHLOOKUP関数になります。

 

r>操作

@検索値を入力セルを決めて、そこにサンプルを入力する

A行番号を入力するセルにHLOOKUPを利用した数式を入力する

[A]指定した項目名の列番号が求められる

 

セルE15に入力している項目名を変更すれば、セルG15の列行番号が更新されるかを確かめておきます。

 

 EX4A961Z

 EX4A962Z

 

●行と列の番号を非表示にする

このままでもいいのですが、行と列番号が目障りなら、番号を入力している行と列を非表示にすれば、すっきりとした一覧表にできます。VLOOKUPやHLOOKUP関数に使っている範囲の一部分を非表示にしても、データは正しく抽出されます。

 

[A]C列を非表示に設定する

[B]5行を非表示に設定する

 

 EX4A262Z

 

 

 

 

【まとめ】

●縦(列)と横(行)の位置を指定してデータ抽出を行うにはINDEX関数を使う

●INDEX関数は検索機能を持たない。

●検索でデータ抽出を行う場合、VLOOKUP関数やHLOOKUP関数と組み合わせて使う

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 r操作     
線吹き出し 3: [A]線吹き出し 3: A線吹き出し 3: [C]線吹き出し 3: A線吹き出し 3: [A]線吹き出し 3: A線吹き出し 3: [A]線吹き出し 3: A線吹き出し 3: @線吹き出し 3: [B]線吹き出し 3: 検査値「C」は3つ目にある、したがって抽出データも3つ目の「山口」が抽出される線吹き出し 3: [B]線吹き出し 3: @線吹き出し 3: @線吹き出し 3: @
線吹き出し 3: @線吹き出し 3: [B]線吹き出し 3: @線吹き出し 3: A
線吹き出し 3: [B]線吹き出し 3: [A]線吹き出し 3: [A]線吹き出し 3: [B]線吹き出し 3: [A]線吹き出し 3: [A]線吹き出し 3: [A]線吹き出し 3: [C]線吹き出し 3: [A]
線吹き出し 3: [A]線吹き出し 3: [A]線吹き出し 3: [B]線吹き出し 3: [A]
線吹き出し 3: [A]線吹き出し 3: @線吹き出し 3: [A]線吹き出し 3: @線吹き出し 3: @線吹き出し 3: [A]線吹き出し 3: @線吹き出し 3: @線吹き出し 3: @線吹き出し 3: [B]線吹き出し 3: [A]線吹き出し 3: A線吹き出し 3: @
線吹き出し 3: @線吹き出し 3: @線吹き出し 3: [A]線吹き出し 3: [B]