[[20110526120710]] 『VLOOKUPの検索方向を逆にするには』(ゆき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VLOOKUPの検索方向を逆にするには』(ゆき)

検索値と一致する値が範囲の左端に複数ある場合は、最初に検索された値が使用されますが、最後に検索された値が使用されるようにするにはどうすればいいのでしょうか?
単純に考えれば検索方向を逆にすればいいのかなとも思いますが、どうすればそうなるのかわかりません。

日付順に縦に並んでいる全顧客からの注文表を検索範囲として、各顧客の顧客情報表を作成しているのですが、担当者や住所などが経年変化するため、最新の情報を常に得るには検索範囲の下方(日付の新しい方)からデータを拾ってくる必要があるのです。
よろしくお願いします。

Windows 7、Excel2007


 よーわからんけど。

 	A	B	C	D	E
 1	項目	データ		項目	データ
 2	A	1		B	200
 3	B	2			
 4	C	3			
 5	A	100			
 6	B	200			
 7	C	300			

 D2に検索値・E2に結果

 E2 =LOOKUP(1,0/($A$2:$A$7=D2),B2:B7)

 こういうことかいな?  ※エラー処理なし

 (GobGob)

ありがとうございます。そうです、こういうことです!
ただ恥ずかしながら私、VLOOKUPは知っていましたが、単なるLOOKUPというのは知りませんでした。
で、ちょっと調べてみたところ、これはベクトル型というものでしょうか?
私が見た説明には、LOOKUP(検査値,検査範囲,対応範囲)と書いてあったのですが、先生のご説明ですと
検査値が1、検査範囲が0/($A$2:$A$7=D2)となっていて私の頭では理解不能です。
これはどういう意味なのでしょうか?
0/というのが検索方向を逆にするためのミソのような気はするのですが、もう少し詳しく知りたいです。
もしご説明が面倒であれば、参考になるサイトページがあればご紹介いただけると助かります。
よろしくお願いいたします。


 なんで絶対参照にしたんだろ? ま、ええか。

 [1] (A2:A7=D2) → 検索対象 A2:A7 が 検索値 D2 と一致しているか? (配列処理)

 [2] 0/(A2:A7=D2) → 0を[1]で計算した結果で割り算 (論理値は計算すると1と0で処理)。
                     当然 0を0(FALSE)で割り算するとエラー。

 [3] LOOKUP(1,0/(A2:A7=D2)  → [2]の配列結果から1を検索。LOOKUPは検索処理が二分探索で
                               行うので配列の最後の0の位置を返す。
                              (LOOKUPはエラーを無視して処理)

 [4] =LOOKUP(1,0/(A2:A7=D2),B2:B7) → [3]の位置結果に一致する B列のデータを返す。

 こんなかんじですわ。
 配列数式ってやつですな。
 二分探索に関してはWeb上で検索でもしてみて。

 (GobGob)


ありがとうございます。
なんとなく理解しました。
検査範囲の検査結果を1と0の2種類ではなく、1種類とエラー、つまり実質上1種類に絞るのがミソということですかね?
試しに0/を1/にしたり、100/にして検査値を100にしても機能しました。
色々と勉強になりました。本当にありがとうございました。<(_ _)>

 補足。

 1種類に絞るってか、検索値と同じものに絞るってことですな。

 検索値は 検索範囲計算結果より大きい数字やないと
 おかしな結果になる場合があるよ。なんせ二分探索やからね。

 あと、このLOOKUPはベクトル形式でなくどっちか言うと配列形式やね。

 (GobGob)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.