• ベストアンサー

offsetとmatchで検索抽出をしようとしましたが。。。

今行き詰ってます・・どうか知恵を貸してください! 下記のようなデータベースを作りまして、    A       B         C    →AB 1  番号      表題      試薬名 ↑ 15 865-10036-00 アセトン/水混液(9:1) アセトン 16 865-10037-00 塩化バリウム液   塩化バリウム 17 865-10038-00 塩酸,希        塩酸 18 865-10039-00 薄めた塩酸(1→10)  塩酸,希 19 865-10040-00 酢酸,0.2mol/L     酢酸 ↓ 500以上 例) 試薬名の塩酸,希の文書番号865-10038-00を表示させたい  上記のような表のデータベースがあります。別シートにvlookupで表示させた文書番号毎の表があり、その表の余白にvlookupで試薬名をだし、その試薬名と同じ名前の表題の文書番号を 表に表示したい。 OFFSET(データベース!$B$1,MATCH(L5,データベース!B:B,0),-1)        L5は余白に抽出した試薬名のセル番号 この式で文書番号は出るのですが、なぜか1つ下の番号が必ずでてしまいます。なぜだか私にはさっぱり。。。 どうか助けてください。 よろしくお願い致しますm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

№2です。 質問文をよく読んでいなかったのですが・・ >例)試薬名の塩酸,希の文書番号865-10038-00を表示させたい  「試薬名」 は C列ですよね? ということは、試薬名「塩酸、希」の文書番号は "865-10039-00" じゃないでしょうか? それと、L5セルに入っているのは 「表題」ではなく「試薬名」で間違いないですか? ↑だとしたら、数式の MATCH関数の検査範囲は、 「データベース」シートのB列ではなく、C列にしなければなりませんが・・? つまり、ご質問通りに考えるなら数式は↓のようになると思います。 --------------------------------------------------------- =OFFSET(データベース!$B$1,MATCH(L5,データベース!C:C,0)-1,-1) --------------------------------------------------------- ◆B:B → C:C に変更 ◆MATCH関数が返した値から 1 を引く --- それと、OFFSET関数の基準セルが B1 になっているのは何か意味があるんでしょうか? これを A1 にすれば、列方向への移動は必要ありませんから、 ↓のようになります。(◆最後の -1 → 0 になる) --------------------------------------------------------- =OFFSET(データベース!$A$1,MATCH(L5,データベース!C:C,0)-1,0) --------------------------------------------------------- 結果は同じですが、一応参考まで。 ★わからないのが、現状の数式でもちゃんと文書番号が表示される、ということです。 まあ、「塩酸、希」のように B列にも C列にも存在するものなら、 文書番号が表示されはするでしょうが・・。

ranneko
質問者

お礼

ヘルプありがとうございます。 私の 例)がちょっと悪かったようです 正しくは >試薬名と同じ名前の表題の文書番号を表に表示したい なので B列でいいのですが、その他のアドバイスはもしや・・・それかも・・・ なので さっそく明日会社で確認してみます。ありがとうございます!!

ranneko
質問者

補足

昨日はありがとうございました。 今日 色々やってみたところ なにげなーくやった  <データベース!B:B、>を  <データベース!B2:B1000、>(1000は適当) に変更がビンゴ!で ちゃんと抽出できるようになりました。 なぜだかまだ よく分かってない私ですが これから 勉強してちゃんとわかるように頑張りまーす!(^o^)/

その他の回答 (2)

回答No.2

こんばんは。 数式を↓のように修正してみてください。 ------------------------------- =OFFSET(データベース!$B$1,MATCH(L5,データベース!B:B,0)-1,-1) ------------------------------- 最後のところが ,0)-1,-1) ↑OFFSET関数の行数を、MATCH関数で求めた数値から 1 を引かないとダメです。 質問のケースで説明しますと、 たとえば L5セルに "塩化バリウム液" が入っているとします。 MATCH関数が返す値は 16 です。 16 が OFFSET関数の行数になります。 B1セルを基準にして 16行下になりますから( 1 だとB2 ですよね)、 参照するのは B17の "塩酸,希" になります。 だから返ってくるのは、"塩化バリウム液" ではなく、 "塩酸,希" の文書番号になる、ということじゃないでしょうか?

  • Teariss
  • ベストアンサー率30% (3/10)
回答No.1

Excel2003のヘルプを読んだだけですが・・・ MATCHで返ってくる値が配列の中の位置(先頭だったら1)に対して、 OFFSETで指定すべき値が一つ少ない(基準のセルそのものならば0)からじゃないでしょうか。

ranneko
質問者

お礼

ヘルプありがとうございます!(^o^) なーるほど そーかもしれませんね さっそく明日会社で確認してみます。

ranneko
質問者

補足

昨日はありがとうございました。 今日 色々やってみたところ なにげなーくやった  <データベース!B:B、>を  <データベース!B2:B1000、>(1000は適当) に変更がビンゴ!で ちゃんと抽出できるようになりました。 なぜだかまだ よく分かってない私ですが これから 勉強してちゃんとわかるように頑張りまーす!(^o^)/