スポンサーリンク
今回は今までと少し毛色が異なり、EXCELのちょいテクをお伝えしたいと思います。
以前に先輩に今回のやり方を教えていただいて、感動をしましたので、その思いも乗せてお伝えします。
コンテンツ
vlookupの逆向き
Excelの魅力のひとつはvlookup関数ではないでしょうか。
なんちゃってDBのような働きをみせてくれますので、事務処理含め業務でも重用している方も多いと思います。
しかし、そんなvlookupにも弱点があります。
それは検索のキーになる項目より前の項目が取得できないことです。
<商品マスタ>参照される側
商品番号 | 商品名 |
001 | みかん |
002 | りんご |
<売上>参照する側
No | 商品番号 | 商品名 |
---|---|---|
1 | 001 | |
2 | 002 |
上記のようなデータがあった場合、売上の商品名にVLOOKUPを利用することで、
商品マスタから商品名が取得できます。
=VLOOKUP(商品番号,商品マスタ!商品番号:商品名,2,FALSE)
上記のような式を売上の商品名のセルに入れるかと思います。
VLOOKUPで対応できないこと
先程の例を使ってご説明します。
<商品マスタ>
分類 | 商品番号 | 商品名 |
---|---|---|
食品 | 001 | みかん |
食品 | 002 | りんご |
<売上>
No | 商品番号 | 分類 |
---|---|---|
1 | 001 | |
2 | 002 |
上記は売上のレコードにある分類は商品マスタの1列目にある分類を取得しようとするものです。
スポンサーリンク
VLOOKUP(商品番号,商品マスタ!分類:商品名,-1,FALSE)
のようにやりたくなりますが、第3パラメータのデータ取得元はマイナスで前に戻るような動きにはなりません。
解決策1
力業です。
先ほどの例だと商品マスタの分類列をコピーや切り取りをして、商品名の後ろに持っていきます。
後は通常通り、vlookします。
解決策2
こちらが今回の本命です。
解決策1では列データをいじらなければいけないので、スマートではないですし、そもそも列を動かしてはいけないケースもあると思います。
そんなとき下記のような関数を利用するこど、前述の例は対応可能です。
match関数
検索したいどこにあるかを返してくれる関数となります。
パラメータは下記となります。
1.検索値:検索をする値があるセル位置
2.検索範囲:どこからどこまの値を検索しにいくかの範囲指定
3.照合するやり方:一致、以上、以下などの指定できますが、今回は一致の0のみ利用
index関数
指定された行・列の値を返してくれる関数となります。
パラメータは下記となります。
1.対象範囲:参照される側の検索列と取得したい列を含んだ範囲を指定
2.行番号:値を取得して返す行番号
3.列番号:値を取得して返す行番号
matchとindexの組み合わせ
先程のmatch関数とindex関数を繋ぎ合わせるとvlookupのような機能が実現可能となります。
<商品マスタ>
分類 | 商品番号 | 商品名 |
---|---|---|
食品 | 001 | みかん |
食品 | 002 | りんご |
<売上>
No | 商品番号 | 分類 |
---|---|---|
1 | 001 | |
2 | 002 |
index([商品マスタ全範囲],match([売上]の[商品番号],[商品マスタ]の[商品番号],0),1)
実際の式を想定すると下記となります。(<売上>のNo1分類に入る想定)
=index([商品マスタ]!$A$2:$C$3,match([売上]!$B2,[商品マスタ]!$B$2:$B$3,0),1)
この式は汎用的に利用できるので、参照を行う際はぜひ思い出してご利用いただければと思います。
スポンサーリンク