トップ > スキル : アプリケーション > Excel(エクセル) > 基礎編(関数:黄金の組み合わせ術)

Excel

関数:黄金の組み合わせ術

商品NOに対するデータを検索・抽出する(Sheet:VLOOKUP)

商品コードを入力すると、一覧表から探し出して商品名や単価を自動表示する関数もよく利用されるものです。代表的なものが、VLOOKUP関数で、数値でも文字列でも検索できます。
まず、VLOOKUP関数の基本的な操作を行いましょう。

◆ データを検索する(VLOOKUP)

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

引数の「範囲」は、検索先のセル範囲を指定します。数式をコピーする場合は、絶対参照を設定します。「列番号」は、「範囲」で指定するセル範囲の左端から何列目のデータを参照するかを指定します。「検索の型」は、完全一致(データそのものと一致)の場合はFalse(または0)、不完全一致(検索値以下で最大の値を求める)の場合はTrue(または1)を指定します。

見積表の中の「商品NO」を入力すると、右側の一覧表から商品名と単価が表示されるようにしましょう。

セル【B5】にVLOOLUP関数で数式を入力しますが、検索値とするセル【A5】にデータがない場合はエラー表示されます。そこで、IF関数と組み合わせて、エラー表示を回避するように作成します。
セル【B5】に次のような数式を入力します。

=IF($A5="","",VLOOKUP($A5,$G$3:$I$9,2,0))

Point:

引数の「論理式」には、セル【A5】が空白の場合、という条件を記述し、「真の場合」は空白、「偽の場合」は、VLOOKUP関数で、一覧表から参照して、一覧表の左から2列目のデータを取り出すようにします。数式のコピーを考慮して、セル範囲には絶対参照を設定します。

セル【B5】に入力した数式をセル【B8】までコピーしましょう。
次に商品NOを2つ入力してみます。

【A5】:「230」
【A6】:「120」

商品名が一覧表を参照にして表示されることが確認できます。
C列の単価も一覧表から参照されるようにしましょう。
セル【B5】の数式をセル【C5】にコピーします。
セル【C5】の数式を次のように書き変えます。

=IF(A5="","",VLOOKUP(A5,$G$3:$I$9,3,0))

(※VLOOKUP関数の列番号を「3」に変更する)

列番号を「3」とすることで、単価のデータを取り出す設定となります。
セル【C5】の数式を、セル【C8】までコピーしましょう。

Point:

VLOOKUP関数は、IF関数と組み合わせるパターンが多いので、この関数の基本となる組み合わせ術だと覚えておきましょう。
また、一覧表に新たな項目が追加されることがある場合は、範囲は列全体を指定します。これで常に最下行まで検索できるようになります。
セル【B5】に入力する数式は上記のようにしておきます。

=IF(A5="","",VLOOKUP(A5,$G:$I,2,0))

範囲のあるデータを検索・抽出する( Sheet:VLOOKUP(2) )

VLOOKUP関数の引数の「検索の型」を「TRUE」(不完全一致)を指定すると、「~以上~未満」という距離や時間などの連続した数量の区切った表からも合致したデータを取り出すことができます。

セル【A5】に重さを入力すると、右の一覧表から参照されてセル【B5】に配送料が表示されるようにしましょう。

IF関数と組み合わせ、エラー表示されないようにします。VLOOKUP関数の第4引数の「検索の型」をTRUEに設定するため「1」とします。ちなみに、Falseは「0」ですが、Falseの場合は省略可能です。
セル【B5】に次の数式を入力します。

=IF(A5="","",VLOOKUP(A5,$D:$E,2,1))

(※ 配送料金一覧表の「重さ」の数値には「~g未満」または「~g以上」の表示形式が設定されています)

セル【A5】に「1250」と入力しましょう。

ただし、200gより小さい値を入力するとエラー表示されますので、セル【B5】の数式を次のように変更します。

=IF(A5="","",IF(A5<200,300,VLOOKUP(A5,$D:$E,2,1)))

複数の条件からデータを取り出す( Sheet:MATCH )

VLOOKUP関数は、列番号を指定してデータを取り出しますが、以下の表のように重量と種類の条件からデータを取り出すときは、VLOOKUP関数だけでは実現できません。

このような場合、MATCH関数と組み合わせることで探したいデータを取り出すことができます。


◆ 「検査範囲」を「検査値」で検索し、一致するセルの相対位置を返す(MATCH)

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

第3引数の「照合の型」は、指定している「検査値」の内容と完全一致したデータなのか不完全一致したデータとして調べるかを指定します。「0」を指定すると完全一致、「1」を指定すると「不完全一致」です。

「配送重量とサイズの料金一覧」では、重量を「~未満」という表現を使っています。しかし、VLOOKUP関数で検索できるのは「~以上~未満」という区分の「~以上」の値となります。そのため、「~以上」の数値部分を表の左側(ここではA列)に検索用として書き出しておきます。セル【A7】からセル【A17】を『作業セル』として利用し、A列に次のデータを入力しましょう。

「配送利用料金検索」の「種類」欄で指定したデータが料金一覧の左から何列目にあるかを調べるためにMATCH関数を利用します。
『作業セル』としてセル【C4】を使い、そのセルに次の数式を入力しましょう。

=IF(C3="","",MATCH(C3,A6:F6,0))

IF関数と組み合わせてセル【C3】に入力されたデータが一覧表の左から何列目かを調べます。ここで列番号が調べられるのであれば、セルD3にVLOOKUP関数を入力して「重量」と「種類」から探したい料金を一覧表から取り出すことができます。
セル【D3】に次のような関数を入力しましょう。

=IF(B3="","",VLOOKUP(B3,A7:F17,C4,1))

セル【B3】に「1100」、セル【C3】に「大型」と入力します。

このようにVLOOKUP関数とMATCH関数を組み合わせることで、複数の条件を元にデータを取り出すことができます。

Point:

VLOOKUP関数は、一覧表の左端の列から「検索値」に一致するデータを検索するので、検索対象となる列が左端になければ使えません。

商品名に対する単価を調べる( Sheet:MATCH (2) )

下の「商品単価検索」のように、「商品名」を入力しそれに対する単価を調べたいときは、VLOOKUP関数は使えません。この場合、MATCH関数とINDEX関数を組み合わせることで実現できます。

◆ 引数指定した「範囲」から、「行番号」「列番号」で指定したセルの値を取り出す(INDEX)

=INDEX(範囲,行番号,列番号)

行番号は「上から何番目」、列番号は「左から何番目」なのかを指定します。

まず、表から入力された「商品名」が上から何行目になるかを調べる必要があります。
セル【D2】を『作業セル』として使用し、次の数式を入力しましょう。

=IF(C2="","",MATCH(C2,B8:B16,0))

セル【C2】に「ヘッドホン」と入力し、計算結果を確認しましょう。

商品名「ヘッドホン」は一覧表の上から「7」番目にあることが確認できます。

では、次にINDEX関数を用いて、セル【A5】に次のように数式を入力しましょう。

=IF($D$2="","",INDEX($A$8:$D$16,$D$2,1))

同様にセル【B5】と【C5】に次のような数式を入力します。

※セル【A5】の数式をコピーして、列番号のみを書き換えます。

セル【B5】に =IF($D$2="","",INDEX($A$8:$D$16,$D$2,3)) と入力

セル【C5】に =IF($D$2="","",INDEX($A$8:$D$16,$D$2,4)) と入力

INDEX関数の「列番号」は、「単価」は左から「3」、「在庫」は「4」番目なので、その数値を指定します。「行番号」はMATCH関数で調べた数値「7」ですので、それが表示されているセル【D2】を指定します。
このようにVLOOKUP関数が使えない状況では、MATCH関数とINDEX関数の組み合わせが有効になります。

MATCH関数とINDEX関数の組み合わせの例 2 ( Sheet:MATCH(3) )

上の表では、D列に『作業セル』として数値を入力しています。
「重量」に応じて料金を取り出すようにしましょう。
この場合、「重量」が降順に並んでいて、「~まで」という条件になっているため、VLOOKUP関数は利用できません。MATCH関数は、引数「照合の型」を「-1」にすると「検索値以上で最小の値」を求めることができます。これを使うと、「~まで(○○以下で○○より大きい)」という区分を降順に並べた表を検索することができます。

セル【B4】を作業セルと利用し、次の数式を入力しましょう。

=IF(B2="","",MATCH(B2,D3:D9,-1))

次に、セル【B3】に次の数式を入力しましょう。

=IF(B4="","",INDEX(F3:F9,B4))

結果を確認します。セル【B2】に「880」と入力します。以下の図のように結果表示されます。

(※セル【B2】にはあらかじめ「g」の表示形式が設定されています)


「重量」が5kgより大きい数値のとき、エラーが表示されます。これを回避するには、次のような数式に書き換えます。また、5kgを超える重量は「配送不可」と表示されるようにします。

セル【B3】に =IF(B2="","",IF(B2>5000,"配送不可",INDEX(F3:F9,B4))) と入力

セル【B3】に =IF(B2="","",IF(B2>5000,"",MATCH(B2,D3:D9,-1))) と入力

セル【B2】に「5500」と入力すると、「料金」を表示するセル【B3】に「配送不可」が表示されます。