人に聞けない痔の悩み、これでスッキリ >>

お教えください。

1.
ネットで調べ、lookup(検索値,0/検索範囲,対応範囲)で逆から検索できることを知りました。
(EXCEL2000で確認、A1:A100のような有限1列範囲ではできたがA:Aではエラー)
この0/範囲という記述方法の詳細をお教えください。

2.
ネットでLOOKUP(9^99,…のような記述を見かけたのですが意味がわかりません。詳細をお教えください。

このQ&Aに関連する最新のQ&A

A 回答 (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以上なら何でも良いはずです。

この回答への補足

    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が戻り値となる。

補足日時:2009/05/14 16:20
    • good
    • 1
この回答へのお礼

ご解説ありがとうございます。理解できました!

お礼日時:2009/05/13 09:40

2は、2^99は2の99乗で、普通シートへ入れる数値としてはこれを超える数値は入れない(と言う前提のために使う)


http://www.excel.studio-kazu.jp/kw/2004052921593 …
に解説例が有る。
Googleで2^99よりむしろ「エクセル "LOOKUP" 9^99」で照会して、出てくる記事を見てください。
http://detail.chiebukuro.yahoo.co.jp/qa/question …
「検査値に一致する値が無いと、検査値以下の値の最大値を検査結果として返す」性質を逆手に取り、わざとありえない値を検査値にすると、検査値以下の値の最大値を捉まえることが出来る、と言うわけです。

例データ
A1:B2
3x
3e
F1:G6に
1a
2b
3c
3x
5d
6e
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?p …
2.
http://www.moug.net/faq/viewtopic.php?t=35498

補足日時:2009/05/10 18:56
    • good
    • 0

「0/検索範囲」は「逆から」というより、検索範囲でゼロ以上の最後の値を抽出してくる


0を0以外の適当な数値にすると、その数値を検索範囲の数値で割った値で検索されますね

「LOOKUP(9^99」について
9^99はNo1さんの回答通りですが、通常あり得ない大きな数値を指定する事により検索範囲で一番大きな値を検索するという意味だと思います
    • good
    • 0
この回答へのお礼

ご見解ありがとうございます。
配列で割ると、各値で割った値の配列になるということでしょうか?
しかし1ならともかく、0/{10,20,30,40}={0/10,0/20,0/30,0/40}={0,0,0,0}となってしまって意味が無いから違いますよね…
この仕様、呼称があるのでしょうか?検索しようにも"0/"ではうまく検索できなくて困ります。
累乗記号のほうは納得です。ありがとうございました。

お礼日時:2009/05/09 13:41

1は解りません。



2は、9^99 とは 9の99乗 という意味です。
    • good
    • 0
この回答へのお礼

ご見解ありがとうございます。
^に:や!のような特別な意味が与えられているのかと思いましたがそんなことはないという訳ですね。

お礼日時:2009/05/09 13:33

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelの関数LOOKUP(1,0/FIND(....))の意味

Excelの関数やVBAなどをTips集の本で勉強中です。
その中の「検索値の一部の値を含むリストから抽出したい」という項目があります。例としては、

A15:B20の範囲に、

足立区100
荒川区200
板橋区300
江戸川区400
大田区500
葛飾区600

という区コード表が入力されており、
A1に「東京都板橋区大原町1-1-1」と入力されているとき、B1に上のテーブルから区コードを求めて表示する、とあります。

このときB1に入る式が、
=LOOKUP(1,0/FIND($A$15:$A$20,A1,$B$15:$B$20)
となっているのですが、説明を読んでもなぜこの式で抽出できるのかがわかりません。(というか、この式の説明がないのです。こう入力すると求められます、としか書いてなくて…)

特に、
・LOOKUP関数の最初の1とはなんなのか?(普通ここには検索値が入りますよね)
・0/FIND(...) のところの意味は?
がわかりません。

ネットで検索しても、0/というのは日付などで大量にヒットするため、解説を見つけられません。誰か教えてください。

Excelの関数やVBAなどをTips集の本で勉強中です。
その中の「検索値の一部の値を含むリストから抽出したい」という項目があります。例としては、

A15:B20の範囲に、

足立区100
荒川区200
板橋区300
江戸川区400
大田区500
葛飾区600

という区コード表が入力されており、
A1に「東京都板橋区大原町1-1-1」と入力されているとき、B1に上のテーブルから区コードを求めて表示する、とあります。

このときB1に入る式が、
=LOOKUP(1,0/FIND($A$15:$A$20,A1,$B$15:$B$20)
となっているのですが、説...続きを読む

Aベストアンサー

>=LOOKUP(1,0/FIND($A$15:$A$20,A1,$B$15:$B$20)
◆式が違っていませんか?
=LOOKUP(1,0/FIND($A$15:$A$20,A1),$B$15:$B$20)
◆こんなことでは、ないでしょうか?

1)式=LOOKUP(1,0/FIND($A$15:$A$20,A1),$B$15:$B$20) が入力されているセルを指定します
2)数式バーで、「0/FIND($A$15:$A$20,A1)」を選択して、「F9」を押します
3)表示が、「{#VALUE!;#VALUE!;0;#VALUE!;#VALUE!;#VALUE!}」になります
4)LOOKUP関数は、LOOKUP(検査値,検査範囲,対応範囲) です
5)検査範囲に、検査値が無い場合は「検査値に一致する値がないと、検査値以下の値の最大値を検査結果とします。」
6)ということで、3番目の0を検索し、対応範囲の3番目の「300」を表示します


◆ 0/FIND(...)  にすることで、検索値の「1」より小さくしています

>=LOOKUP(1,0/FIND($A$15:$A$20,A1,$B$15:$B$20)
◆式が違っていませんか?
=LOOKUP(1,0/FIND($A$15:$A$20,A1),$B$15:$B$20)
◆こんなことでは、ないでしょうか?

1)式=LOOKUP(1,0/FIND($A$15:$A$20,A1),$B$15:$B$20) が入力されているセルを指定します
2)数式バーで、「0/FIND($A$15:$A$20,A1)」を選択して、「F9」を押します
3)表示が、「{#VALUE!;#VALUE!;0;#VALUE!;#VALUE!;#VALUE!}」になります
4)LOOKUP関数は、LOOKUP(検査値,検査範囲,対応範囲) です
5)検査範囲に、検査値が無い場合...続きを読む

QExcelで、条件と一致する最後のセルを検索したい

Excelで、条件と一致する最後のセルを検索したいのですが、どの関数をどのように使えばいいかわかりません。
どなたかお力をお貸し下さい。

問)
日付  社名  品名  個数
1/1   A    あ    1
1/1   C    い    2
1/2   B    う     3
1/2   A    え    4
1/3   C    お    5
1/3   A    あ    3

答)
A社の最終購入日は  1/3 あ 3
B社の最終購入日は  1/2 う  3
C社の最終購入日は  1/3 お 5

となるようお願いします。

Aベストアンサー

エクセルには「最後の該当」を検索する関数はありません。
無駄に複雑な数式を駆使すればもちろん「やればできます」が、添付図のようにちょっと工夫するだけで、普段使いの数式だけでやっつけるのがお勧めです。

A2:
=IF(OR(C2="",COUNTIF($C$2:C2,C2)<COUNTIF(C:C,C2)),"",C2)
以下コピー

答えは簡単なVLOOKUP関数を使うだけです。
H2:
=IF(COUNTIF($A:$A,$G2),VLOOKUP($G2,$A:$E,2,FALSE),"")




まぁ一応ご参考に作業列を使わない方法:
H2:
=IF(COUNTIF($C:$C,$G2),INDEX(B:B,MAX(IF($C$2:$C$999=$G2,ROW($C$2:$C$999)))))
と記入し、必ずコントロールキーとシフトキーを押しながらEnterで入力する

説明は省略しますので、ブラックボックスで使ってください。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Q初めて0以外の数値が出てきたときの値を表示(EXCEL)

化学系の仕事をしていて実験の値をエクセルでまとめています。
こんなことは出来るのでしょうか?

1分ごとに測定を行いますが、はじめの数分は0の値が続きます。
簡単に例を挙げるとこんな感じです。
【例】
分→測定値
00→0
01→0
02→0
03→0
04→2.36
05→4.83
06→3.52

このとき初めて数値が0以外の値が出たときの2.36の値を適当なセルに表示させるにはどのような方法がありますか?測定値の数値には規則性がないのでMAX関数やMIN関数が使えません。何かいい方法教えてください。

Aベストアンサー

A列にデータがあるとしたら、
=INDEX(A1:A99,MATCH(TRUE,A1:A99<>0,0))
を配列数式として入力(Ctrl+Shift+Enter)
でいかが?

Qセル番号を返す関数

エクセルで、セル番号を返す関数はありますか??
セルの内容ではなくて、番号です。(A1、B3など)
調べてみましたがなかなか見つからなかったので、
わかる方教えてください。
宜しくお願い致します。

Aベストアンサー

文字として"C4"を返す。
=ADDRESS(ROW(C4),COLUMN(C4),4)

式を入力したセルの位置を文字列で返す。
=ADDRESS(ROW(),COLUMN(),4)

ADDRESSの3つ目の引数を変えると
$C$4
$C4
C$4
C4
の4つの形に出来ます。


人気Q&Aランキング