• 締切済み

ExcelでWeb検索のような検索を実現したい

mitarashiの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.7

#6です。調子に乗っています。すみません。 正規表現版を作成してみました。 (アクセス Or Access)には対応しました。 アクセス Or Access に対応していないのは仕様です(複数のOrも考えると、スッキリした対策が浮かばないので...) UserFormから呼ぶところは省略しております。 小難しいSQLを作成しないで、どうせコードで処理するので、AND条件だけのSQLを複数生成して、順次抽出する様にすれば、別の解があるのかなと感じております。 Function makeSQL(myTableName As String, myFieldname As String, matchWord As String) As String Dim orStr As String, andStr As String Dim andConditions As Variant, orConditions As Variant Dim mySQL As String, whereStr As String Dim i As Long Dim orFlag As Boolean Dim regEx As Variant, Matches As Variant Dim submatchword As String, targetString As String targetString = treat(matchWord) Set regEx = CreateObject("VBScript.RegExp") regEx.MultiLine = False regEx.Pattern = "\((.+?)\)" regEx.IgnoreCase = True regEx.Global = True Set Matches = regEx.Execute(targetString) '(.+)が2個以上ヒットしていればエラーを戻す If Matches.Count >= 2 Then MsgBox "Or条件は一個のみ対応です" makeSQL = "Error" Exit Function End If If Matches.Count > 0 Then orFlag = True orStr = Matches(0).submatches.Item(0) andStr = Trim(regEx.Replace(targetString, "")) regEx.Pattern = "\s{2,}" Set Matches = regEx.Execute(andStr) If Matches.Count > 0 Then andStr = regEx.Replace(andStr, " ") Else andStr = targetString End If Set Matches = Nothing Set regEx = Nothing If andStr <> "" Then andConditions = Split(andStr, " ") For i = 0 To UBound(andConditions) If Left(andConditions(i), 1) = "-" Then andConditions(i) = "(myFieldName Not Like (""%" & Mid(andConditions(i), 2, Len(andConditions(i)) - 1) & "%""))" Else andConditions(i) = "(myFieldName Like (""%" & andConditions(i) & "%""))" End If Next i whereStr = Join(andConditions, " And ") End If If orFlag Then orConditions = Split(orStr, " OR ") If andStr = "" Then For i = 0 To UBound(orConditions) orConditions(i) = "(" & "(myFieldName Like (""%" & orConditions(i) & "%"")))" Next i Else For i = 0 To UBound(orConditions) orConditions(i) = "(" & whereStr & " And " & "(myFieldName Like (""%" & orConditions(i) & "%"")))" Next i End If End If If orFlag Then mySQL = "Select * From myTableName Where " & Join(orConditions, " Or ") & ";" Else mySQL = "Select * From myTableName Where " & whereStr & ";" End If mySQL = Replace(mySQL, "myTableName", myTableName) mySQL = Replace(mySQL, "myFieldName", myFieldname) makeSQL = mySQL End Function Function treat(sourceWord) As String Dim buf As String buf = UCase(sourceWord) buf = Replace(buf, "(", "(") buf = Replace(buf, ")", ")") buf = Replace(buf, "OR", "OR") buf = Replace(buf, " ", " ") buf = Replace(buf, " -", " -") buf = Replace(buf, " ー", " -") treat = buf End Function

tpuz2000
質問者

お礼

ありがとうございます。ここまで丁寧に回答して頂きまして、感謝、感激で、涙ボロボロです。

関連するQ&A

  • ロータス機能のエクセルでの実現について

     ロータス123では、データベース関数の条件式をデータベース内のデータ個別に変更することが可能(データベース関数の条件式がデータ個別に変更可能)でしたが、エクセルでは条件式をセルで表現しなければならないので、困っています。  例  1000人分の生年月日が入力されたセルがあり、現在年齢を算出し、ある年齢のデータ数を数える。  このような場合、123ではデータテーブルに一切触らずに1セル1行の関数で計算できたのに、エクセルでは別に1セルを年齢計算結果として使用せざるを得ず、テーブルの様式やシート構造を変更できないデータの場合困っています。  123の例 DSUM関数の条件式にDGET関数とDATEDIFF関数を組み込む  今のところ、全てVBAで組んでいます(VBAで年齢計算し、セル書き出し)が、後々の担当者のことを考えるとできたら関数で表現したいのですが、どなたかお分かりの方がいらっしゃったらお教えください。

  • データ検索

    エクセル2003VBAの質問です。 AシートにAデータベースがあります。 そのデータベースには一つのセルに、日にちと時間が入力されています。(例 2008/10/07/ 16:29) BシートにもBデータベースがあります。 Aシートの先程のセル(日にちと時間)を、Bシートで検索したいです。 しかし、このBシートには、Aシートのセルが一致しないものもあります。 一致すれば、Aシートの先程のセルとAシートに入力されている、他の項目をCシートにコピーしたいです。 一致しなければ、そのデータベースは無視して、Aシートに入力されている次のデータ(次の行)を検索したいです。 どうすれば良いでしょうか? よろしくお願いします。

  • エクセル 検索のVBAの参考プログラム

    エクセルでVBAを使って、検索キーワードの有る「行」のみ表示するVBAを作りたいです。 イメージとしては、1文字入力するたびに検索が実行され、その文字の有る「行」だけが表示されるイメージです。 実行の順番として考えるのは、 10 検索用のセルにキーワードが入力される 20 一文字入力されるたびに検索を実行する 30 検索ワードの有る行を表示し、無い行を非表示にする です。 補足 BASICの基礎知識はあります。 VBAの参考書を読み始めましたが、分かりません。。。 参考プログラム教えてもらえないでしょうか。 よろしくお願いします。

  • 検索関数を使って検索窓を作成したいんですが・・・

    検索関数を使って検索窓を作成したいんですが・・・ 仕事でExcelを使っていて他の人に聞いても解決できなかったのでこちらでご質問させて頂きます。 質問内容は検索です。 データの範囲内にある数値、文字など、全てが対象になります。 条件は下記の通りです。 1.検索窓のようなセルに毎回関数など入力せず、文字や数字を入力するだけ。googleなどの検索窓と同じです。 2.検索結果は検索窓の右側に自動的に表示。検索内容を変更した時に自動的に反映される。 3.検索例 例1) 岡田 ←名前だけで検索 例2) 2010/01/20 ←日付で検索 例3) 岡田 A-102W ←名前と型番で検索 例4) 岡* ←ワイルドカードも使用可能 4.データ範囲はシートをまたぐこともあり。 つまり、A1というセルに文字を入力すればその文字に関する情報が一覧表示されるということです。 上記の条件でやりたいんですが、マクロやVBAなどは全くわかりませんので、 エクセルの関数のみで何とかならないでしょうか。 よろしくお願いします。

  • Excelの検索

    Excelをデータベースに利用しています。検索されたセルの文字数が多い場合、検索に使用したキーワードの位置が見つかり難くなります。キーワードを色、反転などで表示する方法はありませんか?

  • EXCELでビンゴゲームのようなものを作りたいのですが・・・

    すみません。お知恵を拝借したく存じます。 EXCEL2003にて、ビンゴゲームのようなものを作りたいと思っています。 例C1~G5に1から25までの数字をランダムに入力し、  A1~A5に抽選番号(1~25)を入力すると、  C1~G5に入力した番号を検索し、そのセルに色を塗りたいのですが、  EXCEL2003では条件付書式が3つまでしか使えないため、  例のように4つ以上の条件がある場合での方法はないものでしょうか?  何か関数があるのでしょうか?VBAを使えばできるのでしょうか? よろしくお願いいたします。

  • エクセルの検索

    エクセルでの使い方について質問です。 現在、エクセル2007を使用しています。 データを入力し、作成したデータの中からワード検索などをする際に、 編集から検索をクリックし、検索ワードを入力しております。 この作業が、機能するときと、まったく機能しないときがあります。 なぜ機能しないのか、お分かりになる方、教えてください。 保存形式等によって、検索できなくなるのでしょうか? よろしくお願いします。

  • 検索関数を使って検索窓を作成したいんですが・・・

    検索関数を使って検索窓を作成したいんですが・・・ 仕事でExcelを使っていて他の人に聞いても解決できなかったのでこちらでご質問させて頂きます。 質問内容は検索です。 データの範囲内にある数値、文字など、全てが対象になります。 条件は下記の通りです。 1.検索窓のようなセルに毎回関数など入力せず、文字や数字を入力するだけ。googleなどの検索窓と同じです。 2.検索結果は検索窓の右側に自動的に表示。検索内容を変更した時に自動的に反映される。 3.検索例 例1) 岡田 ←名前だけで検索 例2) 2010/01/20 ←日付で検索 例3) 岡田 A-102W ←名前と型番で検索 例4) 岡* ←ワイルドカードも使用可能 4.データ範囲はシートをまたぐこともあり。 上記の条件でやりたいんですが、マクロやVBAなどは全くわかりませんので、 エクセルの関数のみで何とかならないでしょうか。 よろしくお願いします。

  • エクセルでセル内を検索

    こんばんは。エクセルについて質問です。 セルA1 に、I love you. セルA2 に、Who killed whom? セルA3 に、We don't know yet whether HRT is dangerous or not. みたいに、セルごとに英文を打ち込んで、「例えば、"love" で検索をかけると、セルA1 のようなセル内に love という文字列を含むセルが瞬時に分かる。"HRT" で検索をかけると、セルA3 が検索結果に出る」というような機能はエクセルにはありますか?? もしあれば、やり方を教えて下さい。お願いします。

  • Excel 特定のセルだけEnterでセル内改行

    タイトル通りのことなのですが、VBA等を駆使してできないか悩んでいます Excelのセル内改行は通常Alt+Enterなのですが、 使っているシートの一つのセルだけ複数行入れるような大きな所があります。 他のセルでは問題ないのですがここの入力時では、 いつもAltを押しながらでないと改行できない煩わしさが募りまして、 「このセル内に限り」Enterキーだけで改行できるようにしたいのです。 条件としてはあくまでこのセルのみで、形を崩さずにできることが望ましいです。 この入力セルは他シートから参照されているため 複数行のセルに分割したり、テキストボックスに置き換えることは難しいです 色々探した挙句、Application.MoveAfterReturn など VBAを駆使して考えてみたのですが 手詰まりになってしまいました。 何かできる方法はありますでしょうか?