• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:効率のいいリスト検索)

効率のいいリスト検索

このQ&Aのポイント
  • 3桁の数字が000~999までa列に並んでいます。そしてその横b列に不特定な数字があります。任意の数字を指定してa列の数字と一致したb列の数字を取得する方法を教えてください。
  • この表に対して、任意の数字を指定して、a列の数字と一致したb列の数字を取得する方法を教えてください。私は上から1000回ifで聞いていく方法しか思いつきませんが、より効率的な方法があるのでしょうか。
  • 3桁の数字が000~999までa列に並んでいます。そしてその横b列に不特定な数字があります。私はこの表に対して、任意の数字を指定して、a列の数字と一致したb列の数字を取得したいのですが、どうすれば効率的に実現できるでしょうか。

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

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6803/9674)
回答No.6

普通に考えるならば、VLOOKUP関数を使います。(Vertical Lookup、縦検索) ですので、求める値は =VLOOKUP(値, A1:A1000, 2, false) →「A1からA1000の中で、値を検索し、該当行の2列目の値を取ってくる。完全一致検索(false)」 という意味になり、お望みのとおり検索できます。 このときA列は、昇順または降順で並んでいる必要がありますが、値は飛び飛びでも構いません。 ---- もう一つ、考え方があります。 A列の数値と、行数が、一定の関係(式で表せるもの)にあるのでしたら、セル番号の指定で値を取ってくることが出来ます。 質問の表では、値 + 1=行番号 という関係になっていますね。 そこで、 =INDEX(B1:B1000, 値+1, 1) →「B1からB1000という範囲の中で、(値+1)行目で1列目の値を取ってくる」 という意味になるので、検索値から直接セルの値を持ってくることが出来ます。 ※B1:B1000という範囲のみに注目しているので、その中では、取り出す値が1列目にあることになります。 こちらの方法では、A列は無くても構いません。

nagahaha
質問者

お礼

早速有り難うございました。 皆様の回答を頂き、vlookupを忘れていました。 これなら使ったことがあったのですが。 また、indexも知りました。 説明でよく分かりました。 早速使わせていただきます。 お世話になりました。

その他の回答 (4)

回答No.8

無理してマクロを使ってやってみました C1セルに数字、D1セルに結果を出すとして Sub Macro3() Range("D1").Formula = "=INDEX(B:B,MATCH(TEXT(C1,""000""),A:A))" End Sub エラー処理はしてません。A列は3桁の数字(文字列)であり、数値でないものとしています。 キーワードは「二分探索」でしょうか。

nagahaha
質問者

お礼

早速有り難うございました。 さらにマクロまで頂き、恐縮です。 皆様の回答を頂き、vlookupを忘れていました。 また、indexも知りました。 早速使わせていただきます。 お世話になりました。

noname#204879
noname#204879
回答No.7

貴方の質問を面白がっている輩のいるようだけど… 》 例えば、 》 任意の数字=「004」なら「009」を。 どういう理屈でそうなるの? 私の素朴な疑問です。「アレは単に例だった」なんてナシです!

  • remu224
  • ベストアンサー率7% (4/56)
回答No.5

VLOOKUP関数を使いましょう =VLOOKUP(検索する数値を書いたセル,A1:B1000,2)

nagahaha
質問者

お礼

早速有り難うございました。 皆様の回答を頂き、vlookupを忘れていました。 使ったことがあったのに、すっかりです。 今回、indexを知りました。 こちらを使わせていただきます。 お世話になりました。

  • zero456
  • ベストアンサー率0% (0/5)
回答No.4

どの言語を用いるかによって変わってくると思うのですが、単純にデータベース化してSQLで問い合わせではだめなのでしょうか。

関連するQ&A