- ベストアンサー
EXCELで0/範囲
お教えください。 1. ネットで調べ、lookup(検索値,0/検索範囲,対応範囲)で逆から検索できることを知りました。 (EXCEL2000で確認、A1:A100のような有限1列範囲ではできたがA:Aではエラー) この0/範囲という記述方法の詳細をお教えください。 2. ネットでLOOKUP(9^99,…のような記述を見かけたのですが意味がわかりません。詳細をお教えください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
配列を扱う関数は、A:Aというように列全体を指定できないです。 エクセルの仕様です。 例 =SUMPRODUCT(A:A,B:B) だと、エラー。 lookup(検索値,0/検索範囲,対応範囲)というのは、 そのリンク先を見ると =LOOKUP(1,0/(Sheet1!$A$2:$A$10=A2),Sheet1!$C$2:$C$10) と、なってます。 (Sheet1!$A$2:$A$10=A2)の部分がミソで、TRUEかFALSEの配列になります。 TRUE = 1 FALSE = 0 で、計算されるので、 0/1 = 0 0/0 = #DIV/0! 0/(Sheet1!$A$2:$A$10=A2)の部分は、0かエラーの配列になります。 LOOKUPはエラー値を無視するようなので、最後の 0 を検索できる仕掛けになってます。 この場合、検索値は 1 でなくても、 0以上なら何でも良いはずです。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
2は、2^99は2の99乗で、普通シートへ入れる数値としてはこれを超える数値は入れない(と言う前提のために使う) http://www.excel.studio-kazu.jp/kw/20040529215931.html に解説例が有る。 Googleで2^99よりむしろ「エクセル "LOOKUP" 9^99」で照会して、出てくる記事を見てください。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1119815151 「検査値に一致する値が無いと、検査値以下の値の最大値を検査結果として返す」性質を逆手に取り、わざとありえない値を検査値にすると、検査値以下の値の最大値を捉まえることが出来る、と言うわけです。 1 例データ A1:B2 3 x 3 e F1:G6に 1 a 2 b 3 c 3 x 5 d 6 e B1の式 =LOOKUP(A1,F1:F6,G1:G6) B2の式 =LOOKUP(A2,0/F1:F6,G1:G6) 質問からxを期待していたが?? 判らない。 >ネットで調べ 類似例のGoogle検索も見つけられなかった。本質問異外は。
補足
申し訳ありませんでした。私は以下を見つけ本質問をしました。 1. http://www.efcit.co.jp/cgi-bin2/exqalounge.cgi?print+200611/06110145.txt 2. http://www.moug.net/faq/viewtopic.php?t=35498
- ASIMOV
- ベストアンサー率41% (982/2351)
「0/検索範囲」は「逆から」というより、検索範囲でゼロ以上の最後の値を抽出してくる 0を0以外の適当な数値にすると、その数値を検索範囲の数値で割った値で検索されますね 「LOOKUP(9^99」について 9^99はNo1さんの回答通りですが、通常あり得ない大きな数値を指定する事により検索範囲で一番大きな値を検索するという意味だと思います
お礼
ご見解ありがとうございます。 配列で割ると、各値で割った値の配列になるということでしょうか? しかし1ならともかく、0/{10,20,30,40}={0/10,0/20,0/30,0/40}={0,0,0,0}となってしまって意味が無いから違いますよね… この仕様、呼称があるのでしょうか?検索しようにも"0/"ではうまく検索できなくて困ります。 累乗記号のほうは納得です。ありがとうございました。
- nattocurry
- ベストアンサー率31% (587/1853)
1は解りません。 2は、9^99 とは 9の99乗 という意味です。
お礼
ご見解ありがとうございます。 ^に:や!のような特別な意味が与えられているのかと思いましたがそんなことはないという訳ですね。
お礼
ご解説ありがとうございます。理解できました!
補足
A B 1 コード アイテム 2 1003 item01 3 1004 item02 4 1003 item03 5 1005 item04 6 1006 item05 7 1004 item06 8 1003 item07 9 1010 item08 10 1006 item09 ・コードごとに最新のアイテムを算出したい。 ・リストは時間順にソートしてあるとする。(下の行ほど新しい) 例として1003を検索すると、行2, 4, 8が該当し、 最新のアイテムは行8のitem07である。 1) 検索元コードの真偽値配列をつくる A2:A10=1003 配列は{TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE} 2) 0÷TRUEは0、0÷FALSEはFALSE=0のため#DIV/0!エラーとなるのを利用し(1)の配列を変換する。 0/(A2:A10=1003) 配列は{0, #DIV/0!, 0, #DIV/0!, #DIV/0!, #DIV/0!, 0, #DIV/0!, #DIV/0!} 3) LOOKUP関数は、 a) 検索値が見つからないとき、一番最後の値を返す。 b) エラー値は無視する。上記(a)の対象にもならない。 という仕様であるため、(2)の配列に対し0でない値を検索すると最後の0の位置に対応する値を返す。 検索範囲 対象範囲 0 item01 #DIV/0! item02 0 item03 #DIV/0! item04 #DIV/0! item05 #DIV/0! item06 0 item07 #DIV/0! item08 #DIV/0! item09 は、 0 item01 0 item03 0 item07 と見なされ、これに対し1を検索値とすると、最後の値item07が戻り値となる。