- ベストアンサー
効率のいいリスト検索
- 3桁の数字が000~999までa列に並んでいます。そしてその横b列に不特定な数字があります。任意の数字を指定してa列の数字と一致したb列の数字を取得する方法を教えてください。
- この表に対して、任意の数字を指定して、a列の数字と一致したb列の数字を取得する方法を教えてください。私は上から1000回ifで聞いていく方法しか思いつきませんが、より効率的な方法があるのでしょうか。
- 3桁の数字が000~999までa列に並んでいます。そしてその横b列に不特定な数字があります。私はこの表に対して、任意の数字を指定して、a列の数字と一致したb列の数字を取得したいのですが、どうすれば効率的に実現できるでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
普通に考えるならば、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列は無くても構いません。
その他の回答 (4)
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
無理してマクロを使ってやってみました C1セルに数字、D1セルに結果を出すとして Sub Macro3() Range("D1").Formula = "=INDEX(B:B,MATCH(TEXT(C1,""000""),A:A))" End Sub エラー処理はしてません。A列は3桁の数字(文字列)であり、数値でないものとしています。 キーワードは「二分探索」でしょうか。
お礼
早速有り難うございました。 さらにマクロまで頂き、恐縮です。 皆様の回答を頂き、vlookupを忘れていました。 また、indexも知りました。 早速使わせていただきます。 お世話になりました。
貴方の質問を面白がっている輩のいるようだけど… 》 例えば、 》 任意の数字=「004」なら「009」を。 どういう理屈でそうなるの? 私の素朴な疑問です。「アレは単に例だった」なんてナシです!
- remu224
- ベストアンサー率7% (4/56)
VLOOKUP関数を使いましょう =VLOOKUP(検索する数値を書いたセル,A1:B1000,2)
お礼
早速有り難うございました。 皆様の回答を頂き、vlookupを忘れていました。 使ったことがあったのに、すっかりです。 今回、indexを知りました。 こちらを使わせていただきます。 お世話になりました。
- zero456
- ベストアンサー率0% (0/5)
どの言語を用いるかによって変わってくると思うのですが、単純にデータベース化してSQLで問い合わせではだめなのでしょうか。
お礼
早速有り難うございました。 皆様の回答を頂き、vlookupを忘れていました。 これなら使ったことがあったのですが。 また、indexも知りました。 説明でよく分かりました。 早速使わせていただきます。 お世話になりました。