- ベストアンサー
ExcelかAccessでキーワードの抽出
- ExcelかAccessを使用して、特定のキーワードを含むレコードを抽出する方法について教えてください。
- キーワード群の中から特定のキーワードを抽出するために、Excel(2003)のオートフィルタ機能を試しましたが上手くいきませんでした。もし、Accessの機能でできるのであれば、2007を使用してやってみたいと思います。良い方法があれば教えてください。
- 質問文章は、ExcelかAccessを使用して、キーワード群から特定のキーワードを抽出したいという内容です。Excel(2003)のオートフィルタ機能では上手くいかず、Access(2007)を使用する方法について教えて欲しいという要望です。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
アクセスのクエリで抽出条件を 抽出条件: Like "* もち *" または: Like "* もち" または: Like "もち *" とすればいいんです。 アクセスのもっとも基本的な機能の一つです。 全角スペースと半角スペースが混在していると、または、を増やして組み合わせを全部書いていくことになります。 アクセスを使ったことありますか? まずテーブルを作ります。 No と 単語 というフィールドを作り、Noには番号を、単語にはそのもちとか何とかを書いていきます。 もちろんフィールドの名前は何でも構いません。 次にクエリを作ります。 そのクエリで抽出条件を決めて、そのクエリを実行すれば条件に合ったレコードを拾ってきます。 アクセスの使い方を解説しているサイトはたくさんあります。 ググってみてください。 たまたま上の方に出てきたのを一つ紹介しておきます。 http://www.seta.media.ryukoku.ac.jp/manual/office/access/index.html
その他の回答 (6)
- 30246kiku
- ベストアンサー率73% (370/504)
- tsubuyuki
- ベストアンサー率45% (699/1545)
折角ですから、アクセスでも。 本当はエクセルでTXT形式で保存して、 スペース区切りテキストファイルとしてインポートしてやるのが一番早いのですが・・ なお折角ですから、エクセルでコピーして、アクセスにそのまま貼り付けて 対象テーブルを作った、と仮定して話を進めます。 エクセルで対象範囲をコピーして、 アクセスのデータベースウィンドウの余白で右クリック→貼り付け で新たなテーブルが出来ます。 このテーブルの名前が「Sheet1」、フィールド名が「F1」という感じで出来上がったとします。 データベースウィンドウからモジュールを選択し、新規作成。 VBEが起動しますので、標準モジュールに Public Function TextSplit(Sou, Idx, Optional Spl As String = " ") As String If IsNull(Sou) Then Exit Function On Error Resume Next TextSplit = Split(Sou, Spl)(Idx) End Function と言うユーザー定義関数を作ってやり、保存します。 ザックリと説明しておくと、 「Sou」と言う文字列の「Spl」で指定された文字列で区切り、 「Idx」番目の「Spl」以降の文字列を返すユーザー定義関数です。 「Spl」を省略すると、スペースを区切り文字として扱います。 区切られた最初の文字列を抽出するときは「Idx=0」、 次の文字列は「Idx=1」・・・と指定してやります。 ちなみに、全角半角を問わず、スペースであれば反応してくれます。 混在していても反応しますので、その考慮は不要です。 さて、データベースウィンドウに戻り、クエリを新規作成します。 SELECT Sheet1.F1 FROM Sheet1 WHERE TextSplit([F1],0)="もち" OR TextSplit([F1],1)="もち" OR TextSplit([F1],2)="もち" OR TextSplit([F1],3)="もち"; 「複数のキーワード」が増えそうなら、 「OR TextSplit([F1],X)="もち"」を増やしてやりましょう。 上記ユーザー定義関数は、結果が無かったら空白を返してきますから、 始めから多めにしておくのも一つの手です。 こんな感じでクエリを作成し、走らせてやると「もち」を含むレコードを抽出してくれます。 添付した図はクエリをデザインビューで見たところと、その結果です。 (かなり見辛いような気もしますが・・・)
お礼
ユーザー定義関数を使うのは初めてで、最後の最後で躓いて、上手くいきませんでした・・・^^; 勉強して、次回はこの方法でやらせて頂こうと思います! ありがとうございました!
- KURUMITO
- ベストアンサー率42% (1835/4283)
抽出といってもフィルタ機能を使ってもできますし、抽出したものを別の場所に表示させることもできますね。 シート1のA2セルから下方にお示しのデータが有るとしたら、例えばC列を作業列としてC2セルには次の式を入力して下方にドラッグコピーします。 =IF(ISNUMBER(FIND("きなこもち",A2)),"",IF(ISNUMBER(FIND("ずんだもち",A2)),"",IF(ISNUMBER(FIND("もち",A2)),MAX(C$1:C1)+1,""))) その後に例えばシート2のA2セルに次の式を入力して下方にドラッグコピーします。 =IF(ROW(A1)>MAX(Sheet1!C:C),"",INDEX(Sheet1!A:A,MATCH(ROW(A1),Sheet1!C:C,0))) この式は同じシート1の別のセルに入力して下方にドラッグコピーすることでもよいでしょう。 また、フィルタ機能をどうしても使いたいとのことでしたらC2セルに式を入力して下方にドラッグします。C1セルには作業列とでも入力してからA1セルからC1セルを選択したのちに「並べ替えとフィルター」で「フィルター」を選択し、C1セルで昇順を選択すればよいでしょう。
お礼
ご回答ありがとうございます。 ちょっと式が長くなりすぎて、手に負えないかもしれないので、今回は別の方法を試します。 ありがとうございました。
- tsubuyuki
- ベストアンサー率45% (699/1545)
除外する言葉が「きなこもち」「ずんだもち」だけでなく、 「くさもち」とか「もちはだ」とか「おもちゃ」とかも在るのであれば 素直に数ステップ踏みましょう。 以下、2003での手順です。 まず、 > 複数のキーワードがスペースで区切られ一つのセルの中に入っている この範囲を選択し、データ→区切り位置 を選択します。 ウィザードダイアログが表示されますので、 1/3・・カンマやタブに(略)を選択し、次へ 2/3・・スペースにチェックを入れ、次へ 3/3・・表示先を任意に設定するのであれば、表示先を変更し、完了 と進みます。 3/3で変更せずに完了すると、元の値が上書きされますので注意です。 次に、区切られて新たに表示された値に干渉しない列に式を入力します。 今回は4列目「4 四角 もち 丸」が4語から成っているので、5列目(E列)に入力します。 E1セル:=COUNTIF(A1:D1,"もち") これを必要な行数分コピー(フィル)してやります。 キーワード「もち」を含む行にはその数が返ってきますので、そこにフィルタをかけます。 よって、最後のステップ。 式を入力した列を含む列(今回はA:E列)を選択した状態でフィルタ。 E列にオプション→「1以上」とし、フィルタをかけてやります。 こうしてやると、きっと「もち」を含む行だけを抽出できますよ。
お礼
そうなんですよね、素直にステップを増やす方が確実なんですよね^^; でもデータの数や種類が多いので、できれば手順を減らしたいのです。 ありがとうございました!
- keithin
- ベストアンサー率66% (5278/7941)
エクセルではフィルタの詳細設定(Excel2003ではフィルタオプションの設定)を利用して、もう少し複雑な抽出を行わせます。 準備: A1にタイトルと記入し、A2以下に一連のデータを列記 クライテリア領域の作成: C1、D1、E1にタイトルと記入 C2に <>*きなこもち* D2に <>*ずんだもち* E2に *もち* とそれぞれ記入 抽出: データタブの並べ替えとフィルタグループの中から「詳細設定」を開始 抽出先はとりあえず指定した範囲を指定 リスト範囲にA列を設定 検索条件範囲にC1:E2を指定 抽出範囲にてきとーなセルを指定 してOKします。 #補足 クライテリア領域を数式を使用して作成し、条件を一つに束ねる事も可能です。 「フィルタオプションの設定 数式」などをキーワードにして、ネットで探してみてください。 #別の方法 B列に条件を満たすか否かを評価する数式をずらり並べ、その結果にオートフィルタなどを使って絞り込んでみるのも簡単な方策です。 B2: =AND(ISERROR(FIND("きなこもち",A2)),ISERROR(FIND("ずんだもち",A2)),ISNUMBER(FIND("もち",A2)))
お礼
なるほど! ありがとうございます^^
お礼
Accessは数年前に勉強したきりでほとんど覚えていなかったのですが、-Ken-Ken-様の回答でちょっと思い出せました! おかげさまでなんとか目的を果たすことができました! 本当にありがとうございました。