人に聞けない痔の悩み、これでスッキリ >>

はじめまして☆
エクセルで検索エンジンのようなものを作成しているのですがなかなかうまくいきません。
ご存知の方、教えていただければと思います。

シートが検索用シート、データ用シートと分かれていまして
=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

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#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))),"")
となります。

いきなり最終形を書いてしまうと理解しにくいと思い、段階的に式を記述しましたが、これでも理解できないということなら最初に書いたようにオートフィルタのご利用をお薦めします。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
早速チャレンジしてみます。
大変な内容でしたのに…本当に感謝です☆彡 
ありがとうございました(^O^)/

お礼日時:2007/06/20 15:16

#01です。

最初の式が誤っていました。以下に差し替えて下さい

=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(A1)+1))
    • good
    • 0
この回答へのお礼

とってもお礼をしたいのですが、ポイントなどはどうやってつけるのかよく分かりません。
まだ、試していませんが、本当に親切に教えていただいたので感謝です♪
ポイントのつけ方などご存知でしたら、教えて下さい。
たくさんポイント差し上げたいですw

お礼日時:2007/06/20 15:21

ご質問の内容はよく分かりません。


>その行を全て表示させるということですが
検索したい文字列を含む行を複数表示したいように読み取れますが、データ用シートをみるとA1に表示される検索キーと合致する項目を横方向に並べるようにも読み取れます。でも、

=INDEX($J$2:$J$5000,SMALL(IF(ISERROR(FIND(検索!$L$2,$J$2:$J$5000)),1000,ROW($J$2:$J$5000)-1),ROW()-2))
>細かい内容はよくわかっていないのですが

これが理解できていないのなら、何を回答してもまた繰り返しで、応用が利かないのではないでしょうか。
先頭の$J$2:$J$5000を別の列に変えれば、J列が検索シートのL2と合致するデータを引っ張ってくるはずですよ

この回答への補足

文章下手ですいません(^_^;)
Jの列には、カナに変換させる関数が入っています。
A列にも入っていますが、それは、VLOOKUPを使用するためです。
A列から引っ張ればいいのですが、先に上記の関数を作ってしまったので…。
該当する行を表示させるにはどうしたらいいのでしょう?
キーワード1で検索した後、その行を表示させたいのです。
ただし、キーワード1には同じ言葉が入っていることがあります。
(ワード2、ワード3には別の内容なのですが…)

補足日時:2007/06/19 14:21
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q独自の検索エンジンを作るには!?

難しいと思いますが独自の検索エンジンを作成してみたいと思っています。

検索エンジンといっても自分のWebサイト内を検索するものではなくGoogleやYahoo!、A9のように全世界のWebを対象にした検索を行う検索エンジンのことです。

検索エンジンに関しては知識がないのですがDBと相性がいいPHPで作成できるのではないのかなと思っています。

そこで質問です。

PHPやPerlなどで検索エンジンを作成することは可能でしょうか?
個人が運営している検索エンジンサイトなどはあるでしょうか?
もし検索エンジンを運営することになった場合はどの位のスペックがあるサーバーが必要になってくるでしょうか?

です。どうぞよろしくお願いいたします。

Aベストアンサー

検索エンジンを個人でphpやperlで作ることは理論上は可能かと思いますが、現実的には厳しいかと思います。

その理由はページの取得にあります。検索エンジンは、大きく分けて2つの部分に分かれます。

・1つは、webページをまわってデータを取ってくる部分。

・もう1つは、検索(要求)された単語やフレーズに応じて、取ってきたwebページのデータから適切なページを選択、表示する部分。

で、本来の検索エンジンでは2つ目(ランキングの評価)が重要なのですが、個人でやる場合には1つ目が非常にハードルが高いです。

例えば、1つのページを取得するのに平均1秒かかるとすると、10億ページを取得するのに約31年もかかります(現在、世界中には数十億ページ以上あるようです)。この部分の高速化は、高速な回線を世界的に多数用意する必要があります。検索対象が日本だけだとしても、億を下らないページがあるでしょうから(最近blog流行ってページ数激増みたいですし)、個人レベルで取得するのはかなり難しいと思います(全ページの巡回だけで数年~数十年かかってしまうでしょう)。

この対策(?)としては、自分では取得せず、大手の取得結果を利用させてもらう考え方があります。
直接的な答えではありませんけど、例えばメタサーチエンジンのceek( http://www.ceek.jp/ )では、検索後をいろんなサーチエンジンに投げて、その結果を取りまとめて表示します。
このように大手の結果を使うのも含めて検討されてはいかがでしょうか?
# それでもとても大変だとは思いますが。

検索エンジンを個人でphpやperlで作ることは理論上は可能かと思いますが、現実的には厳しいかと思います。

その理由はページの取得にあります。検索エンジンは、大きく分けて2つの部分に分かれます。

・1つは、webページをまわってデータを取ってくる部分。

・もう1つは、検索(要求)された単語やフレーズに応じて、取ってきたwebページのデータから適切なページを選択、表示する部分。

で、本来の検索エンジンでは2つ目(ランキングの評価)が重要なのですが、個人でやる場合には1つ目が非常に...続きを読む

QExcelのワークシート上に検索窓とボタンを作りたい

Excelのワークシート上に検索窓とボタンを作ろうとしています。
コントロールツールボックスからテキストボックスとコマンドボタンを1つずつ配置しました。ボタンを押すと検索用マクロが動作してテキストボックスに入力した文字を別のシート上から検索する仕組みです。計画どおりの動作をするようになったのですが、使い勝手についていくつか不満があるので解消したいのです。

1.検索窓のあるシートを開いたとき、カーソルがテキストボックス内にある状態にしたい。

2.カーソルがテキストボックス内にある状態でEnterキーを押すと、検索用マクロが動作するようにしたい。

3.カーソルがテキストボックス内にある状態でTabキーを押すと、コマンドボタンにフォーカスが移るようにしたい。

自分でも色々調べてみたのですが、どうにも分かりません。よろしくお願いします。

Aベストアンサー

こんにちは。
こういうのはユーザーフォームで作ったほうが簡単なんですが。

>1.検索窓のあるシートを開いたとき、カーソルがテキストボックス内にある状態にしたい。

これはシートのActivateイベントで、TextBox1.Activateするだけです。

>2.カーソルがテキストボックス内にある状態でEnterキーを押すと、検索用マクロが動作するようにしたい。

テキストボックスのKeyDownイベントで押されたキーを取得できる。
KeyDownイベントの引数KeyCodeには押されたキーコードが入りますからこれが13(=vbKeyReturn)だったら検索マクロを実行すれいいです。

>3.カーソルがテキストボックス内にある状態でTabキーを押すと、コマンドボタンにフォーカスが移るようにしたい。

同様にKeyDownイベントでTabが押されたことを取得して、コマンドボタンをアクティブにします。Tabキーのコードは9(=vbKeyTab)

Private Sub CommandButton1_Click()
検索マクロ
End Sub

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then 検索マクロ
End Sub


Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then 検索マクロ
If KeyCode = vbKeyTab Then Me.CommandButton1.Activate
End Sub

Private Sub Worksheet_Activate()
Me.TextBox1.Activate
End Sub

こんにちは。
こういうのはユーザーフォームで作ったほうが簡単なんですが。

>1.検索窓のあるシートを開いたとき、カーソルがテキストボックス内にある状態にしたい。

これはシートのActivateイベントで、TextBox1.Activateするだけです。

>2.カーソルがテキストボックス内にある状態でEnterキーを押すと、検索用マクロが動作するようにしたい。

テキストボックスのKeyDownイベントで押されたキーを取得できる。
KeyDownイベントの引数KeyCodeには押されたキーコードが入りますからこれが13(=vb...続きを読む

Qエクセルの検索方法教えてください!!

こんばんは、超エクセル初心者です。

エクセルの列に名前がずらっ~と並んでいるとして・・・、
例えばその中から”高橋さん”を見つけたい時の
方法を教えてください!!

一応、編集→検索で高橋と入力してみたのですが
”検索条件に一致するデータはありません”とメッセージが
でてしまいます。どうしてでしょうか??
詳しい方、教えてください、よろしくお願いいたします。

Aベストアンサー

その方法でまったく問題ないはずですが・・・

考えられる原因として、

1."高橋"という文字が Excelシート内にない。

2.検索オプションが「完全一致」になっている。
ようするに、セル内に "高橋さん" という文字列があったとして、検索するときに "高橋" と入力すると、完全に一致していないので、検索されないという状態になります。
一度、検索ウィンドウを開いて、「セル内容が完全に同一であるものを検索する」にチェックが入っていないか確認してください。

QExcelの行列幅をcmで表示したい

Excelの列幅や、行高は、文字数(ピクセル)表示になっていますよね。それを、cm(mmでもOK)単位の表示ができないのでしょうか? 実は公的な書式を作成するため、寸法どおりにしないといけないので、いつも印刷してからものさしで計っては、・・の繰り返しなんです。どなたかアドバイスをお願いします。ジャストシステムの三四郎を以前のパソコンで使っていたときには、それができたんですよ・・

Aベストアンサー

エクセルのバージョンは?
2007ならルーラーの cm,mm の指定は可能ですが・・・
http://www.eurus.dti.ne.jp/~yoneyama/office2007/excel2007-02.html#page_layout

でなければ、
ものさしマクロ
http://hp.vector.co.jp/authors/VA016119/sizemm.html

Qエクセルで検索窓のようなものを作る

エクセルのシートにテキストボックスとコマンドボタンを配置してシート上のデータを検索することは可能でしょうか?今現在はB列に、複数の文字データが入力してあるので、オートフィルタのオプションから「を含む」で検索してます。
イメージとしては、オートフィルタのオプションから「を含む」を選んでから検索しなくても予めシートに用意してあるテキストボックスに検索したい文字を入れてボタンを押すと、オートフィルタで検索したときと同じような結果が得られるようにしたいと思ってます。

例)
 
 A    B    C    
--------------
1     血液型     

2      A

3      B

4      O

5      AB

上のような表があったとして、テキストボックスにAと入力してボタンを押すとB2とB5が表示されるようにしたと思ってます。いい方法があればご教示願います。

Aベストアンサー

シートにテキストボックス1個、コマンドボタン2個を配置します。
これは出来ますね。
コマンドボタン1個目は検索ボタン、2個目は解除ボタンです。

ツール→マクロ→Visual Basic Editorを選択して
シートに以下のコードを貼り付ける。

------------------ ここから下 ----------------------
Option Explicit

Private Sub CommandButton1_Click()
Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="=*" & TextBox1.Value & "*", Operator:=xlAnd
End Sub

Private Sub CommandButton2_Click()
Selection.AutoFilter
End Sub
---------------- ここまで ------------------

エクセル2000です。
機能は「を含む」です。つまり文字列のどこにでもテキストボックスに入力した文字が含む行を表示します。
ではでは

シートにテキストボックス1個、コマンドボタン2個を配置します。
これは出来ますね。
コマンドボタン1個目は検索ボタン、2個目は解除ボタンです。

ツール→マクロ→Visual Basic Editorを選択して
シートに以下のコードを貼り付ける。

------------------ ここから下 ----------------------
Option Explicit

Private Sub CommandButton1_Click()
Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=2, Criteria1:="=*" & TextBox1.Value & "*", Operator:=xlAn...続きを読む

Qエクセルで複数のキーワードから複数の行を抜き出したい

商品のリストから複数のキーワードで複数の行を抜き出したいと思っています。
例えば以下の5つの行があったとして、

1 紫外線防止サングラス 1,000円
2 伸びるジーンズ 3,000円
3 おしゃれサンダル 800円
4 和風アロハ 4,000円
5 かるがるサンダル 500円

キーワードを
紫外線 サンダル アロハ
で検索すると

1 紫外線防止サングラス 1,000円
3 おしゃれサンダル 800円
4 和風アロハ 4,000円
5 かるがるサンダル 500円

となるようにしたいです。
オートフィルタのオプションからキーワードを含む検索が
できたのですがキーワードが二つしか入力できなかったので
物足りないです。

みなさまよろしくお願いします。

Aベストアンサー

こういう場合は、フィルタオプションを使います。

1行目には見出し行を入れ、

*紫外線*
*サンダル*
*アロハ*

と入れ、フィルタオプションをします。

以下のURLが参考になります。

Excelのフィルタオプション徹底解説!
http://allabout.co.jp/computer/msexcel/closeup/CU20070905A/

Qエクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてくだ

エクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてください。

               A列   B列    C列
Aファイルには 行 【注文月日】、【氏名】、【商品金額】が記入されています。
Bファイルには 行 【注文月日】、【氏名】、【税金額】が記入されています。

AファイルのD列に、Aファイルの【注文月日】かつ【氏名】がBファイルの【注文月日】かつ【氏名】と一致する場合のBファイルC列の【税金額】を表示したいのです。

VLOOKUP関数では条件が1つだけなので使用できませんが、似たような関数で複数条件ができる関数があるなら教えてください。

Aベストアンサー

こんばんは!
一例です。
↓の画像で右側(Bファイル)の方に作業用の列を設けています。
作業列D2セルを
=A2&B2
としてオートフィルで下へずぃ~~~!っとコピーします。

そして、AファイルのD2セルに
=IF(OR(A2="",COUNTIF([Bファイル.xls]Sheet1!D$2:D$1000,A2&B2)=0),"",INDEX([Bファイル.xls]Sheet1!C$2:C$1000,MATCH(A2&B2,[Bファイル.xls]Sheet1!D$2:D$1000,0)))
という数式を入れ、オートフィルで下へコピーすると
画像のような感じになります。
尚、数式はBファイルの1000行目まで対応できるようにしていますが、
データ量によって範囲指定の領域はアレンジしてみてください。

以上、参考になれば良いのですが
他に良い方法があれば読み流してくださいね。m(__)m


人気Q&Aランキング