• 締切済み

エクセル表の中にリンクが貼られているwordファイルの中身をキーワード

エクセル表の中にリンクが貼られているwordファイルの中身をキーワード検索して、検索結果を表示したいのです。 ※マクロ超初心者です。 次のような10,000行データがあるエクセル表があります。    A(野菜) B(果物) C(色) D(word文書にリンク) 1  きゅうり  りんご   赤    ファイル1.doc 2  トマト   バナナ   黄    ファイル2.doc 3  レタス   ぶとう   紫    ファイル3.doc 4  キャベツ  梨     オレンジ ファイル4.doc ・ ・ ・ このエクセル表からリンクが貼られた(D列)すべてのword文書全文の中から、キーワード検索して 検索した結果該当するword文書にリンクを貼っているエクセル表のデータを抜き出して、 一覧表にすることはできますか? 例えば、キーワード検索した結果、ファイル1.docとファイル4.docにそのキーワードが含まれていた場合、 1  きゅうり  りんご   赤    ファイル1.doc 4  キャベツ  梨     オレンジ ファイル4.doc という、表示結果になってほしいのです。 一発で結果表示できなくても、2段階実行とかでも構いません。 どうでしょうか? 至急、教えて下さい!お願いします!!

みんなの回答

回答No.2

>'下の独自関数を呼び出しちゃいます。"aa"は、検索するキーワードを拾ってください。 >'ドキュメント名はアクティブシートから拾ってます。 >If SearchDocument("aa", ActiveSheet.Range("D" & CStr(I)).Value) Then このままでは、ダイアログボックスは開かれずに、"aa"というキーワードを探しに行きます。 上記の"aa"に検索するキーワードが入力されたセルを選択するか、メッセージボックスでキーワードを拾うかは、そちらの使用にあわせてください。 たとえば、シート1のA1のセルに検索キーワードを入力した場合、 Dim KeyWords As String KeyWords = Sheets("シート1").Range("A1").Value If SearchDocument(KeyWords, ActiveSheet.Range("D" & CStr(I)).Value) Then という感じです。 セルに入力された文字列をVBAで参照する方法については、ググってみてください。 ダイアログもついでにすぐ探せるはずです。

回答No.1

10000件のワードファイルからキーワード検索というのは、とても負荷が大きいいですねぇ~ エクセルのVBAでしたら、一個一個見に行っちゃうので、とてもロスが多いです。 .netやJavaでも変わりは無いですが・・・ とりあえずの方法としては、10,000行あるドキュメントをループして、1ファイルずつ検索して結果を保存し、別のシートかなにかにデータを出力していくっていう感じですかな? 'たいがいボタンから動作するかな~?って予想で・・・ Private Sub button1_Click()    Dim I As Long   'For~Nextで最初の行から最終行までを総なめしちゃいます。 For I = 1 To ActiveSheet.Range("D1").End(xlDown).Row     '下の独自関数を呼び出しちゃいます。"aa"は、検索するキーワードを拾ってください。     'ドキュメント名はアクティブシートから拾ってます。 If SearchDocument("aa", ActiveSheet.Range("D" & CStr(I)).Value) Then Sheets(2).Range("A" & CStr(I)).Value = ActiveSheet.Range("A" & CStr(I)).Value Sheets(2).Range("B" & CStr(I)).Value = ActiveSheet.Range("B" & CStr(I)).Value Sheets(2).Range("C" & CStr(I)).Value = ActiveSheet.Range("C" & CStr(I)).Value Sheets(2).Range("D" & CStr(I)).Value = ActiveSheet.Range("D" & CStr(I)).Value End If Next End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Wordドキュメントを検索する独自関数 ' 'SearchDocument '返り値:Boolean 'KeyWords:検索したいキーワード(文字列) 'DocumentName:検索するWordファイルのフルパス(文字列) ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function SearchDocument(KeyWords As String, DocumentName As String) As Boolean SearchDocument = False On Error Resume Next   'オブジェクト変数の宣言 Dim objWord Dim objDoc Dim objSelection   'ワードアプリケーションを格納 Set objWord = CreateObject("Word.Application")   '検索するドキュメントを開く Set objDoc = objWord.Documents.Open(DocumentName) Set objSelection = objWord.Selection   '検索設定   '検索するキーワードを設定 objSelection.Find.Text = KeyWords   '前方から検索する objSelection.Find.Forward = True   'キーワードを単語単位で完全一致させてます。   '文字であいまい検索の場合は省いてください。 objSelection.Find.MatchWholeWord = True   '検索結果があればTrueが返ります。 If objSelection.Find.Execute Then SearchDocument = True End If Set objWord = Nothing End Function こんな感じです。 アレンジは必要ですが、試してみてください。

参考URL:
http://technet.microsoft.com/ja-jp/library/ee692875.aspx
chip-goo-goo
質問者

補足

回答して頂いて、本当にありがとうございます! 早速マクロに登録してみましたが。。。 やっぱり10,000件を検索するのは相当時間がかかるのか、パソコンが固まってしまいました。 ところで、回答して頂いたものを実行すると、キーワードをどこで入力するのでしょうか? ボタンを押下すると、キーワード検索のダイアログボックスが出てくる・・・とか? そのあとに、sheet2に検索結果を含む行の一覧表が表示されているはず・・・なのでしょうか? 本当に何もわからなくてすみません。。。 もう一度、回答お待ちしております。

関連するQ&A