質問: 関数を使って検索エンジンを作りたい はじめまして☆ エクセルで検索エンジンのようなものを作成しているのですがなかなかうまくいきません。 ご存知の方、教えていただければと思います。 シートが検索用シート、データ用シートと分かれていまして =phoneticで検索したい文字列をカナ変換後↓としています。 (↓これも人から教わったので、細かい内容はよくわかっていないのですが、なんとか使っています) =index($j$2:$j$5000,small(if(iserror(find(検索!$l$2,$j$2:$j$5000)),1000,row($j$2:$j$5000)-1),row()-2)) ------検索用シート----------------------------------------- a b c d e f g 1 2 検索ワード入力セル 3 4 検索の結果を4行目以降20行目まで表示させる ------データ用シート--------------------------------------- a b c d e f g h i 1pho関数 ワード1 ワード2 ワード3 2 3 4 これ以降 5000行まで続く↓ やりたいことは、データシートのd1に記入されたキーワード1を検索した上で、その行を全て表示させるということですが、なかなか複雑なようで...。 現在、上記で、検索用シートで文字入力後、その検索ワードの行の内容を全てvlookupで拾おうとしたのですが、検索ワードが同一のものが多数出てきた時に、全て同じ内容になってしまうことに気づきました。(t_t) はじめからやり直さなければいけないような気がしますが、 どのようにしたら、検索して、その該当する行をそれぞれ表示させることができるでしょうか? 関数初心者なので、できましたら、詳しく教えていただければと思います。よろしくお願いいたしますm(__)m
回答: #01です。こういうことですか? データ用シートのd1の値でデータ用シートのj列を検索して、部分一致する文字列がある行を「検索用シート」の4行目以下に表示する。 個人的にはデータ用シートのj列にオートフィルタを設定し、「○○を含む」条件で絞り込む方が簡単で理解しやすいと思いますが、関数式にしてみます まずは検索用シートのa4セルに以下の式を貼り付けて右方向、および下方向にコピーしてみてください。 =index(データ!d:d,large(index(not(iserror(find(データ!$d$1,データ!$j$1:$j$5000)))*row(データ!$j$1:$j$5000),),countif(データ!$j$1:$j$5000,"*"&データ!$d$1&"*")-row(d5)+1)) ただしこの式では検索条件に合致した行数以降は#num!エラーとなります。この問題を回避するためにはa4に貼り付ける式は =if(countif(データ!$j$1:$j$5000,"*"&データ!$d$1&"*")>row(a1)-1,index(データ!a:a,large(index(not(iserror(find(データ!$d$1,データ!$j$1:$j$5000)))*row(データ!$j$1:$j$5000),),countif(データ!$j$1:$j$5000,"*"&データ!$d$1&"*")-row(a1)+1)),"") です。 更にこれでもデータ用シートで「空白」のセルは「0」で表示されます。これも回避したいならa4の式は以下になります =if(countif(データ!$j$1:$j$5000,"*"&データ!$d$1&"*")>row(a1)-1,if(index(データ!a:a,large(index(not(iserror(find(データ!$d$1,データ!$j$1:$j$5000)))*row(データ!$j$1:$j$5000),),countif(データ!$j$1:$j$5000,"*"&データ!$d$1&"*")-row(a1)+1))="","",index(データ!a:a,large(index(not(iserror(find(データ!$d$1,データ!$j$1:$j$5000)))*row(データ!$j$1:$j$5000),),countif(データ!$j$1:$j$5000,"*"&データ!$d$1&"*")-row(a1)+1))),"") となります。 いきなり最終形を書いてしまうと理解しにくいと思い、段階的に式を記述しましたが、これでも理解できないということなら最初に書いたようにオートフィルタのご利用をお薦めします。