関数はこの5つさえ知っておけばだいたいOKと書きました。
①IF
②COUNTIF
③SUMIF
④VLOOKUP
⑤LEFT,RIGHT,MID(文字列取り出し関数)
今回はそのうちの ④ VLOOKUP関数 をざっくり解説。
ザックリ解説、これ持ってきて~と指定すると持ってきてくれる関数。初めて知ったときは「なんと便利な関数があるんだべー」と思いました。この出会いあたりから「エクセルって面白い」と思い始めたかも。
■VLOOKUP関数の使い方
次のように指定します。
=VLOOKUP(検索値 , 範囲 , 列番号 , 検索の型)
検索値:検索KEY。このKEYに一致するものを探して、というもの
範囲:ここで指定した範囲から探す。検索値KEYは一番左の列になければならない
列番号:範囲の中で「何列目」かを指定。左から数えて何列目の値を持ってきたいか。
検索方法:検索の形式。次の二つの型のいずれか。
0 (またはFALSE)=完全一致
1 (またはTRUE)=近似値を含めて検索(あいまい検索)
1(あいまい検索)を指定することはほぼないので0と入力と覚えておけばOK。
省略可だが省略すると1のあいまい検索となる。(あいまい検索の使い方は後程…)
■VLOOKUP関数の使い方~簡単な例
商品コードと商品名のテーブルがあり、となりのD列に商品コードを入力し、対応する商品名をE列に表示したい。
VLOOKUP関数を青色のセルE2に入力
=VLOOKUP( 検索KEY, 探す範囲を指定 , 何列目を持ってくる? , ここは0)
・検索KEYは探したい商品コードが入力されているセルD2を指定
・探す範囲はA2~B5のテーブルを範囲指定
・何列目を持ってきたいか?テーブルの2列目の商品名を持ってきたいので「2」を指定
・検索方法は「0」
以下のようになります。
=VLOOKUP( D2, A2:B5 , 2 , 0)
関数ダイアログボックスはこんな感じ
ここで注意点!
・検索値(KEY)は検索範囲の一番左の列を探すので、一番左にしないとだめ。B列が検索KEYの場合、範囲はB列を含みB列より右側を選択する。
・関数ダイアログボックスに「テーブル(検索範囲)は昇順で並べ替えておく必要があります」と書いてあるが、検索方法が完全一致(0、False)の場合、検索範囲のKEYは昇順でなくても大丈夫。検索方法があいまい検索(1,TRUE)の場合は検索範囲のKEYが昇順に並んでないとだめです。
・列番号はA列=1、B列=2ではなく、検索範囲の中で何列目かを指定します。
・検索KEYの書式(数値か文字列か)、全角半角は合わせましょう!
検索値KEYは数値でも文字列でもどちらでも大丈夫。但し、数値なら数値を探し、文字列なら文字列を探すので、検索値と検索範囲のKEYは数値か文字列か一致している必要があります。検索値は数値の101だけど、検索範囲の「101」が文字列だったら「101はありませんでした~#N/A」という答えになっちゃいます。「あるはずなのになぜ#N/A?」というときは書式を確認したらよいかもです。
文字列で全角・半角かが違ってもダメです。
さて。。。ここから下はネチネチしつこく解説になります。ざっくりを求めている方はここより上を読んでいただいただけで大丈夫です。。。
■ 例2:元テーブルを別の表に反映させる
H列~J列に商品テーブルがあり、A~F列の販売明細の表を埋めていきます。
B列に商品コードがあります。ここをKEYにしてC列「商品名」D列「単価」を入れます。そうすると、C列に商品名が表示され何を売ったかが分かりやすくなり、F列の売上(単価×数量)が計算され、販売明細の表が完成します。
セルC2には次のように入力します。
=VLOOKUP( $B2 , $H$2:$J$5 , 2 , 0 )
・検索値:B2の商品コードを指定。列を絶対参照にしておくと、単価の列にコピーしたときに検索列がずれなくて便利。F4を3回押すと列の絶対参照になります。
・検索範囲:H2~J5を指定します。ここは行列とも固定し絶対参照にします。F4を1回押すと範囲の絶対参照になります。
・列番号:商品名は範囲の2列目なので「2」と指定します。
・検索方法:0(False)の完全一致を指定します
セルD2にはセルC2をコピーします。
そして「列番号」を修正します。単価はテーブルの3列目なので、列番号を「3」にします。
セルC2とD2をコピーし7行目まで貼り付けします。
これで完成です~♪
■例3:帳票みたいに使う
帳票的に使うこともできます。
A~E列のテーブルをもとにして、G列以降の帳票を作成します。
セルH1に顧客番号を入れると、下に対応する顧客名~販売個数が表示されるというものです。
H3~H6にVLOOKUP関数を入力しています。I列にH列の関数の中身を表示しています。
まず、顧客名セルH3は
=VLOOKUP( $H$2 , $A$2:$E$3 , 2 , 0 )
・検索値:H2を指定。ここで行列固定の絶対参照$H$2にするのがポイント。
・検索範囲:A2~E3を指定。絶対参照にしておく。
・列番号:顧客名なので検索範囲の2列目。「2」を指定
・検索方法:完全一致(0、False)を指定
セルH3をコピーし、セルh3~H6に貼り付けします。検索値、検索範囲は絶対参照にしているので固定されています。列番号だけを表示したい列番号に修正します。
これで完成~♪
■#N/Aを表示したくない。エラー値対応~IFERROR関数
上の例で、顧客番号が空欄の時は#N/Aと出てしまいます。(入力した顧客番号がないときも♯N/Aとでます)
かっこ悪いから顧客番号入力待ちで空欄の時、下の欄にエラー値が表示されないようにしたいという場合。
IFERROR関数を入れます。
するとすっきり!
IFERROR関数は、1つ目の引数(赤枠内)がエラーだった場合、2つ目の引数に指定した値(青枠内)を返します。エラーではない場合は1つ目の引数に指定した関数の結果を返します。
ここではエラーの場合の戻り値に “” (長さゼロの文字列つまりブランク)を指定しています。返す値(2つ目の引数)には文字列や数値、「-」や「なし」「0」等を指定したり、別の関数(この関数がエラーなら、ほかの関数を指定しよう~等)を指定することもできます。IFERROR関数はVLOOKUPに限らず色々な場面で活躍してくれる関数です。
■列番号を指定するのが面倒な時のコツ
顧客情報テーブル(上)の情報を、下の予約表に反映させます。
黄色の「顧客ID」をキーにしてオレンジのセルに上のテーブルの情報を流し込みます。検索値、検索範囲は絶対参照を利用してコピーすればよいものの、列番号はいちいち入力しなければならないので面倒です。
そこで列番号をどこか別の行に入力しておいて、そこを指定することで列番号の入力が省略できます。
この例では6行目に列番号を入力してあるので列番号の部分に6行目のセルを指定します。行を絶対参照にします。列はコピーしたいときに動かしたいので絶対参照にしません。
最初の顧客名のセルには以下のように入力します。
= VLOOKUP ( $C8 , $A$2:$F$4 , D$6 , 0 )
これを携帯番号の列までコピーすればOKです!
ここでワンポイント!空白が「0」になってしまうときの回避方法
元テーブルの電話番号、携帯番号には空白があります。下の表の佐藤三郎さんの電話番号は上の表で空白ですが「0」と表示されてしまいます。
「0」ではなく空白で表示する方法はいくつかあるかと思いますが…
=VLOOKUP($C9,$A$2:$F$4,G$6,0) & “”
と、VLOOPUPの後ろに「&””」をつなげることで何もない場合は空白で表示されます。空白がある可能性がある場合はVLOOKUPの後ろに「&””」をくっつけておくと、空白の場合は空白、値がある場合はその値を持ってきてくれるので良い方法かと思います。
ただし持ってきたい値が金額等の「数値」の場合、この方法だと文字列になってしまうので数値の場合は別の方法が良いかと思います。オプションの詳細設定の「ゼロ値のセルにゼロを表示する」のチェックを外すとゼロは表示されなくなります。でもファイルすべてに適用になるため、表示したい0も表示されなくなるので、注意が必要です。
■検索KEYが二つあるとき
取引店と顧客番号の二つがKEYになるよ、という場合、どうしたらよいか。
取引店ごとに顧客番号を1からとっている場合、顧客番号だけではKEYになりません。そうゆうときは取引店と顧客番号をつなげてKEYにします。
情報元テーブルの左にKEY列を追加しました(黄色の列)
ここでは取引店と顧客IDをアンドでつなげてKEYにしています。検索範囲は黄色のKEYを含めて指定します。
下の表にVLOOKUPで取引店と顧客IDをKEYにして顧客名を持ってきています。
一つ目は検索KEYを元テーブルと同様に取引店&顧客IDをつなげたKEYをA列に作り、そのKEYを検索値に指定しています。
二つ目はVLOOKUP内部で検索値をB11&C11として検索KEYを作成しています。
検索値はVLOOKUP内で作成してもOKですが、検索範囲のKEYはつなげたものを一番左端の列に用意しておかないとだめです。
上の例の場合&でつなぐことでKEYとなりますが、桁数の関係でおかしくなるような場合は一つ目のKEYと二つ目のKEYで桁をそろえることが必要になります。
この例では取引店IDと顧客IDをつなぐと同じ「1111」になってしまいます。
顧客IDが3桁が最大として、取引店IDに1000をかけてを千台を取引店ID、顧客IDを足して1~百の桁を顧客IDとしています。こうすることでユニーク(単一の)なKEYが作成できます。
■あいまい検索
私は検索方法は「0」の完全一致しか使いません。
「1(TRUE)」のあいまい検索はどんな検索でどんな使い道があるのでしょうか?
こちらのサイトの解説が分かりやすかったです。なるほどーこうゆう使い方があるのか、と感心感服。
ポイントは
・検索範囲に合致するKEY値がない場合、それに近いひとつ前の値を結果に出す。
・完全一致に比べて超高速!
・検索範囲のKEYは昇順に並んでないとだめよ
データ量が膨大な場合、高速なあいまい検索を利用するとよいですね!
とは言っても近似値を出されると困るんだけど…というときの対応方法も上のリンク先に書いてありました!
■完全一致の場合は検索値にワイルドカードを使える
やったことないけど使えるんだって!
こちらの解説がわかりやすかったです。
■VLOOKUPの仲間 HLOOKUP
VLOOKUPの仲間にHLOOKUPがあります。
VLOOKUPは1列目、2列目と縦方向に検索(Vは垂直VercicalのV)
HLOOKUPは1行目、2行目と横方向に検索(Hは水平HorizontalのH)
あんまり使う機会はないのですが…。
上の例では元テーブル1行目の商品名をKEYとしています。
6行目にHLOOKUP関数で検索値「りんご」に対応する単価と仕入れ店を表示しています。VLOOKUPとの違いは列番号ではなく「行番号」を指定するところです。
■新関数! XLOOKUP
VLOOKUP関数の親戚?ほんと新しい2020年1月に出た関数みたいです。今のところ使えるのはオフィス365ユーザーのみ、みたい。
解説を読んだがなんか難しい。
=XLOOKUP( 検索値, 検索範囲, 戻り範囲, 見つからない場合, 一致モード, 検索モード)
VLOOKUPとの違いと利点は
・検索範囲と戻り範囲それぞれ指定すること → VLOOKUPでは検索KEYが一番左端になければいけなかったけど、XLOOKUPは検索範囲と戻り範囲を別に指定するので、検索範囲が左側である必要はない。
・なかった場合返す値を用意しておけること → IFERROR関数との組み合わせでやっていたことがXLOOKUP関数内で終結
ほほ~う。ま、VLOOKUP関数だけでも十分便利だけど!
追記2020.8.4.
注意点を一つ追記
VLOOKUPやほかの関数は別のシートや別のファイルの参照もできます。特にVLOOKUPはほかのファイルのテーブルを参照する場合も多々あります。
他のファイルを参照した場合はVLOOKUPをそのままにせず、コピーして値貼り付けして参照を切っておくことをお勧めします。
ファイルを開くたびに「更新しますか?どうしますか?」とかメッセージが出てうざいし、なんか重くなりそうだし。まあ、好みでしょうか。
またまた長くなってしまいました。ざっくりはウソつきですみません!
お読みいただいた方、ありがとうございます!
関数はこの5つさえ知っていればOK!シリーズ
- 【Excel/関数】関数はこの5つさえ知っていればOKだと思う~(私にもできたんだから)あなたにもできる!エクセル関数を使いこなそう① ~
- 【Excel/関数】ザックリ解説 IF関数~(私にもできたんだから)あなたにもできる!エクセル関数を使いこなそう② ~
- 【Excel/関数】ザックリ解説COUNTIF関数~(私にもできたんだから)あなたにもできる!エクセル関数を使いこなそう③ ~
- 【Excel/関数】ザックリ解説SUMIF関数~(私にもできたんだから)あなたにもできる!エクセル関数を使いこなそう④ ~
- 【Excel/関数】ザックリ解説 文字列操作関数~(私にもできたんだから)あなたにもできる!エクセル関数を使いこなそう⑥ ~
コメント