2016-09-06 5 views
0

私は特定の単語を検索したいたくさんのtxtファイルを持っています。私のアプローチは、単語でtxtファイルを開くためにExcelマクロを使用し、Excelのファイルで提供する単語リストの各項目を検索することです。それは私に各文書の各単語がどのくらいの頻度で出現するかのリストを私に与えます。正規表現を使用して、excel vbaマクロから単語ファイルを検索する

Sub CounterofWords() 

Application.ScreenUpdating = False 

    Dim wdApp As Word.Application 
    Set wdApp = CreateObject("Word.application") 
    wdApp.Visible = False 

For d = 1 To 23 

    Dim wdDoc As Word.Document 


    FName = "C:\Users\Andreas\Desktop\test\" & Cells(d + 1, 11) & "_htm.txt" 
    On Error GoTo txtdesign 
    Set wdDoc = wdApp.Documents.Open(filename:=FName) 

i = 15 

Do While Cells(1, i) <> "" 

iCount = 0 
Application.ScreenUpdating = False 

With wdApp.Selection.Find 
.ClearFormatting 
.Text = Cells(1, i).Value 
     Do While .Execute 
      iCount = iCount + 1 
      wdApp.Selection.MoveRight 
     Loop 
End With 
Cells(d + 1, i).Value = iCount 

i = i + 1 
Loop 





wdDoc.Close savechanges:=False 
Set wdDoc = Nothing 

Next d 

wdApp.Quit 
Set wdApp = Nothing 

Application.ScreenUpdating = True 

Exit Sub 

txtdesign: 
FName = "C:\Users\Andreas\Desktop\test\" & Cells(d + 1, 11) & "_txt.txt" 
Resume 

End Sub 

Here you can see the relevant part of my spreadsheet, where I ran the macro for the first 23 documents.

すべては、これまで正常に動作します:私は、次のコードを使用して、そうするために管理しています。今私は正規表現を検索できるようにしたい。私は検索の際に単語の特定の組み合わせを避けるためにこれを必要とします。

それは私がとにかく

With wdApp.Selection.regex 

のようなものを書くことができない問題のようです、私はこのような状況で正規表現の仕事を作る方法を知っているし、あなたの助けに感謝しないでください!

Selection.Find.MatchWildcards = True 

答えて

0

VBAでFindメソッドでは、このフラグを使用して、パターンマッチングを制限されたことがあるとして、各単語の検索はどこを開始するので、あなたのコードは、正しい結果が得られないでしょう前の文書は文書中に残っています。あなたはそれぞれのための文書の先頭に「移動」する必要があります。

Selection.HomeKey Unit:=wdStory 

をしかし、あなたは正規表現を使用して、より複雑なパターンマッチングが必要な場合、あなたは後に、RegExpクラスを使用して、異なるアプローチが必要になります「Microsoft VBScript Regular Expressions 5.5」を参照してください。このSOの質問に受け入れられた答えの大きな説明を参照してください:How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops。ここで

は、正規表現を使用した例です:

Do While Cells(1, i) <> "" 
    Application.ScreenUpdating = False 
    Dim regEx As New RegExp 
    Dim Matches As MatchCollection 

    With regEx 
     .Global = True 
     .IgnoreCase = True 
     .Pattern = Cells(1, i).Value 
    End With 

    Set Matches = regEx.Execute(wdDoc.Content.Text) 
    Cells(d + 1, i).Value = Matches.Count 
    i = i + 1 
Loop 
+0

は、これまであなたの助けをいただき、ありがとうございます。私はRegExpクラスが必要で、すでにあなたが言及した記事を参照しました。残念ながら、私は、私の場合、正規表現を使ってvba excelマクロから単語を検索したい場合に、それを動作させる方法を理解できません。 –

+0

@AndreasK:regexを使用してサンプルコードを追加しました。正規表現のパターンがプレーンテキストの検索用語ではなくExcelシート内にあることを期待しています。これがあなたが探している答えかどうかを確認してください。 –

+0

ブライアン、ありがとう! –

関連する問題