[[20190829081706]] 『データベースの複数キーワードによる検索』(セシルくん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データベースの複数キーワードによる検索』(セシルくん)

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

マッチした文書が複数あるケースもあるとすると、
計算式を使ったフィルタオプションが良いのでは?
(γ) 2019/08/29(木) 09:27

ねむねむさん

ご回答、ありがとうございます。

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.