[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データベースの複数キーワードによる検索』(セシルくん)
Shee1のA列に資料名を、その隣の10個のセル(B〜K)にその資料のキーワードを列記したデータベースを作成しました。(資料名は全部で200件)
資料名 キーワード1・・・・キーワード10
・・・ ・・・ ・・・ ・・・
・・・ ・・・ ・・・ ・・・
・・・ ・・・ ・・・ ・・・
Sheet2のB1〜E1の4つセルに、検索したい用語を各々入力して、その4つ全部が一致する(AND検索)資料名をA2のセルに表示したいのですが
VLOOKUP関数を使って、キーワード列毎に検索してその結果を別のシートにコピーして、その結果を対象に2回目(2つ目の用語で)検索して・・・を合計10回繰り返すやり方しか思いつきません。
つまり、キーワード1の列を対象に検索して、・・・最後にキーワード10の列を対象に検索して終了。(その間、検索対象は前の検索結果になる)
もっと効率的なやり方があれば、教えて下さい。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
Sheet1のL列を作業列として使う。 Sheet1のL2セルに =SUMPRODUCT(COUNTIF(B2:K2,Sheet2!B$1:E$1)) と入力して下へフィルコピー。 Sheet2のA2セルに =IFERROR(INDEX(Sheet1!A:A,MATCH(4,Sheet1!L:L,0)),"該当なし") ではどうか? (ねむねむ) 2019/08/29(木) 09:11
ご回答、ありがとうございます。
2点問題がみつかりました。
1.検索したい用語が常時4つ入る訳ではなく、例えば、3つだけの時は3つの用語でのAND検索になる。
→ MATCH(4,Sheet1!L:L,0)の”4”の部分をIF文を使って4,3,2の3パターンに変更すれば良いですか?
2.マッチした文書が1つとは限らず複数の場合もある。
→ A列(A2の下)に式を下へ10個ほどコピーして、重複表示される場合は(1件とか2件しかない場合は)重複表示されないような処理すればいいですか?
(セシルくん) 2019/08/29(木) 10:01
その場合はSheet1の式を =IF(SUMPRODUCT(COUNTIF(B2:K2,Sheet2!B$1:E$1))=COUNTA(Sheet2!B$1:E$1),ROW(),"") Sheet2の式を =IFERROR(IF(COUNTA(B$1:E$1),INDEX(Sheet1!A:A,SMALL(Sheet1!L:L,ROW(A1)),0),""),"") として下へフィルコピーしてみてくれ。 (ねむねむ) 2019/08/29(木) 10:09
問題が解決しました。 ありがとうございました。
検索性を向上させるために、「検索したい用語」と登録した「キーワード」とが完全一致の場合だけではなく、部分一致の場合でも抽出できるようしたいのですが、可能しょうか?
実際にやってみると、なかなかヒットしないので。
例えば、
検索したい用語が「環境」でキーワードが「環境条件」の場合でも、ヒットできるようにしたい。
登録するキーワードは長めに、検索する用語は短めにして、検索性を上げたいと思っています。
お知恵をお貸し下さい。
(セシルくん) 2019/08/29(木) 11:08
別案です
Sheet2は使わずに Sheet1だけで 検索語のセルを Sheet1のN1:Q1 として
L2 に 下記の数式を入力して、必要分下にコピー
IF(SUMPRODUCT(ISERROR(FIND($N$1:$Q$1,CONCATENATE(B2,C2,D2,E2,F2,G2,H2,I2,J2,K2),1))*1)=0,"HIT","")
オートフィルターで L列の "HIT" で絞り込む
というのはどうでしょう?
私なら、検索語を Sheet1の上部に設定して データベースは 3行目、4行目あたりからにしますが。
(渡辺ひかる) 2019/08/29(木) 11:24
Sheet1に入力する式を =IF(SUMPRODUCT(COUNTIF(B2:K2,"*"&Sheet2!B$1:E$1&"*")*(Sheet2!B$1:E$1<>""))=COUNTA(Sheet2!B$1:E$1),ROW(),"") としてみてくれ。 (ねむねむ) 2019/08/29(木) 11:25
なお、私の案では キーワードをすべてつなげているので、前後のキーワードとつながって、誤HITになる場合があります。
気になるようでしたら CONCATENATE(B2,C2,D2,E2,F2,G2,H2,I2,J2,K2) の部分を
CONCATENATE(B2,",",C2,",",D2,",",E2,",",F2,",",G2,",",H2,",",I2,",",J2,",",K2)
などとして、カンマ区切りにするようにしてください
(渡辺ひかる) 2019/08/29(木) 11:32
問題が解決しました。
検索性の向上が期待できそうです。 いろいろとありがとうございました。
渡辺ひかるさん
ご提案、ありがとうございます。
Sheet2は使わずにSheet1だけにすると、検索時に誤ってキーワードのデータを消去あるいは書き換えられてしまうリスクがあるため、シートは別々に分けて、データベースの方のシート(Sheet1)を非表示にして、リスクを回避する予定です。
(セシルくん) 2019/08/29(木) 13:09
解決済みに何だが。 式は変更せずに、シート2で検索値を入力する際に部分一致の場合は*検索値*と検索値の両側に*を付けるという方法も。 これだと*を付けず検索値だけで完全一致、*検索値*とすると部分一致、検索値*だと前方一致、*検索値だと後方一致と 検索値ごとに検索方法を別々にできる。 (ねむねむ) 2019/08/29(木) 13:23
ありがとうございます。 参考にします。
データベースの方のシート(Sheet1)の資料名毎にリンクを貼って、リンク先は資料内容のPDFにしようと準備中ですが、Shee2の検索結果にはデータベースのリンク先情報が付いてきません。
=IFERROR(IF(COUNTA(B$1:E$1),INDEX(Sheet1!A:A,SMALL(Sheet1!L:L,ROW(A1)),0),""),"")
にHYPERLINK関数をつけて
=IFERROR(HYPERLINK(IF(COUNTA(B$1:E$1),INDEX(Sheet1!A:A,SMALL(Sheet1!L:L,ROW(A1)),0),""),""))
としても、上手くいきません。
Sheet1のA列の右横に新しく列を挿入して、その列に各資料のリンク先を追加して、Sheet2の検索結果(資料名)A2以下に都度Sheet1から読み込んだリンク先を貼り付けるという手順でしょうか?
(セシルくん) 2019/08/30(金) 17:33
本件、いろいろと大変お世話になりました。
Sheet1に入力する式を =IF(SUMPRODUCT(COUNTIF(B2:K2,"*"&Sheet2!B$1:E$1&"*")*(Sheet2!B$1:E$1<>""))=COUNTA(Sheet2!B$1:E$1),ROW(),"") として解決したと思い、検索精度を検証していたところ、部分一致でもヒットしない(検索されない)ケースが見つかりました。
ヒットする場合は、例えば
検索したい用語が「環境」で、キーワードが「環境条件」という部分一致が1個だけの場合です。
一方、ヒットしない場合は、キーワードが「環境条件」、「地球環境」、「環境保護」といった部分一致が複数ある場合です。 キーワードを1個づつ消去していったら、1個になってヒットしました。
現状のキーワードの抽出方法では、重複は避けられないので、何かいい方法はないでしょうか?
(セシルくん) 2019/09/10(火) 16:15
Sheet1の式を =IF(SUMPRODUCT((COUNTIF(B2:K2,"*"&Sheet2!B$1:E$1&"*")*(Sheet2!B$1:E$1<>"")>0)*1)=COUNTA(Sheet2!B$1:E$1),ROW(),"") としてみてくれ。 (ねむねむ) 2019/09/10(火) 16:33
ありがとうございます。
ヒット件数が増えたので、改善されたようです。
もう少し精査してみます。
(セシルくん) 2019/09/10(火) 17:13
Sheet1のデータベース全体を対象にエクセルの検索機能で
キーワードをいろいろと入れてみて、1件づづ検証してみました。
キーワードが「環境条件」、「地球環境」、「環境保護」といった
部分一致が複数ある場合でも、全部ヒットしていることが確認できました。
本件解決できました。 ありがとうございました。
(セシルくん) 2019/09/11(水) 12:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.