マイクロソフトワードでの質問です。①文書中から”以下「(任意の文字列)」という。”という部分を検索し、②当該(任意の文字列)が文書中で何個使われているかを数える、という作業をマクロとかをつかって簡単にやりたいのですが、どうすればよいか教えてください。

回答の条件
  • 1人2回まで
  • 登録:2009/01/12 11:42:23
  • 終了:2009/01/17 10:00:27

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912009/01/12 22:17:35

ポイント100pt

カウントの部分は tsukasa57 さんが紹介した部分を応用しましたが、

下記のようでどうでしょうか。

'------------------------------------------------------------
Sub FindWC()
'------------------------------------------------------------
    Const findWord = "以下「*」という"  '★★★ 検索形式
    Dim objDic As Object, myKey
    Set objDic = CreateObject("Scripting.Dictionary")
    
    Selection.HomeKey Unit:=wdStory
    Dim dWord As String
    With Selection.Find
        .ClearFormatting
        .Text = findWord
        .Forward = True
        .MatchFuzzy = False
        .MatchWildcards = True
        Do While .Execute
            dWord = Replace(Selection.Text, "以下「", "")
            dWord = Replace(dWord, "」という", "")
            If Not objDic.Exists(dWord) Then
                objDic.Add dWord, 0
            End If
        Loop
    End With

   '--- 検索結果に対してカウント
    Dim wd  As Variant
    Dim ret As String
    
    For Each wd In objDic.keys
        ret = ret & "【" & wd & "】・・・・" & FindCount(CStr(wd)) - 1 & vbNewLine
    Next
    Selection.HomeKey Unit:=wdStory

   '--- 結果表示
    MsgBox ret
End Sub

'------------------------------------------------------------
Function FindCount(sWord As String) As Long
'------------------------------------------------------------
    FindCount = 0
    With ActiveDocument.Content.Find
        Do While .Execute(FindText:=sWord, Forward:=True) = True
            FindCount = FindCount + 1
        Loop
    End With
End Function
id:draftand

お礼が遅れてすみません。すばらしいですね。どうもありがとうございます。

2009/01/17 09:59:47

その他の回答(1件)

id:tsukasa57 No.1

tsukasa57回答回数110ベストアンサー獲得回数202009/01/12 16:37:53

マイクロソフトがマクロを公開していました。

http://support.microsoft.com/kb/413870/ja

このマクロは WORD 2000 用です。

id:draftand

答えになっていません。

2009/01/12 16:53:43
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912009/01/12 22:17:35ここでベストアンサー

ポイント100pt

カウントの部分は tsukasa57 さんが紹介した部分を応用しましたが、

下記のようでどうでしょうか。

'------------------------------------------------------------
Sub FindWC()
'------------------------------------------------------------
    Const findWord = "以下「*」という"  '★★★ 検索形式
    Dim objDic As Object, myKey
    Set objDic = CreateObject("Scripting.Dictionary")
    
    Selection.HomeKey Unit:=wdStory
    Dim dWord As String
    With Selection.Find
        .ClearFormatting
        .Text = findWord
        .Forward = True
        .MatchFuzzy = False
        .MatchWildcards = True
        Do While .Execute
            dWord = Replace(Selection.Text, "以下「", "")
            dWord = Replace(dWord, "」という", "")
            If Not objDic.Exists(dWord) Then
                objDic.Add dWord, 0
            End If
        Loop
    End With

   '--- 検索結果に対してカウント
    Dim wd  As Variant
    Dim ret As String
    
    For Each wd In objDic.keys
        ret = ret & "【" & wd & "】・・・・" & FindCount(CStr(wd)) - 1 & vbNewLine
    Next
    Selection.HomeKey Unit:=wdStory

   '--- 結果表示
    MsgBox ret
End Sub

'------------------------------------------------------------
Function FindCount(sWord As String) As Long
'------------------------------------------------------------
    FindCount = 0
    With ActiveDocument.Content.Find
        Do While .Execute(FindText:=sWord, Forward:=True) = True
            FindCount = FindCount + 1
        Loop
    End With
End Function
id:draftand

お礼が遅れてすみません。すばらしいですね。どうもありがとうございます。

2009/01/17 09:59:47
  • id:tsukasa57
    リンクで示したマクロは質問で書いてある動作をすると思うんだけど...。
  • id:draftand
    ②の部分動作をするだけだと思います。これは別にわざわざマクロをつかわなくたって、検索機能で一瞬でできることです。
    質問の趣旨は、①、②の動作をまとめて行うことができるマクロを教えて下さいというものです。
  • id:tsukasa57
    すみません。趣旨は分かりました。確かに的外れですね。
  • id:fuentebella
    これは、(任意の文字列)が複数あるのですか??

    たとえば文中に "東京大学(以下「東大」という。) ・・・・ 京都大学(以下「京大」という。) ・・・ 東大と京大を比べると・・・"とあって、この文を解析して、「東大」3回、「京大」5回というような一覧を希望されているのでしょうか??

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません