WORDのVBAの質問です

1.WORDのVBAで特定の文字(□)が使われている数を計算するマクロを教えてください。
2.例えば”レ”カタカナのレで囲み線で囲んである文字だけマクロで数えることは可能ですか?

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2007/10/31 10:20:55
  • 終了:2007/11/05 08:42:11

ベストアンサー

id:ardarim No.1

ardarim回答回数892ベストアンサー獲得回数1422007/11/01 01:03:03

ポイント50pt

こんな感じでどうでしょうか。

Sub test()
    
    Dim n As Integer
    
    n = CountChars("□", False)
    MsgBox """ロ""の数" & vbCrLf & n
    
    n = CountChars("レ", True)
    MsgBox "囲み線で囲われた""レ""の数" & vbCrLf & n

End Sub

Function CountChars(ByVal text As String, ByVal onlyBoxed As Boolean) As Integer

    Dim n As Integer
    Dim objRange As Range
    
    Set objRange = ThisDocument.Range
    
    objRange.Find.Forward = True
    objRange.Find.text = text
    
    n = 0
    Do While True
        objRange.Find.Execute
        If objRange.Find.Found Then
            If Not onlyBoxed Or objRange.Font.Borders(1).LineStyle = wdLineStyleSingle Then
                n = n + 1
            End If
        Else
            Exit Do
        End If
    Loop

    CountChars = n

End Function

参考

Word ドキュメントで二重の角かっこ内のすべての単語を検索する方法はありますか

id:garyo

ありがとうございます。ばっちりです。

目的はソフトウエアのチェックリストで以下を数えたかったのでした。

□←未実行のテストケース

囲みレ←OKのテストケース

実績を計算するために数えるのが面倒だったので助かりました。

後は

囲み×←NGのテストケースが出来れば完璧そうです。

2007/11/01 08:48:20

その他の回答(1件)

id:ardarim No.1

ardarim回答回数892ベストアンサー獲得回数1422007/11/01 01:03:03ここでベストアンサー

ポイント50pt

こんな感じでどうでしょうか。

Sub test()
    
    Dim n As Integer
    
    n = CountChars("□", False)
    MsgBox """ロ""の数" & vbCrLf & n
    
    n = CountChars("レ", True)
    MsgBox "囲み線で囲われた""レ""の数" & vbCrLf & n

End Sub

Function CountChars(ByVal text As String, ByVal onlyBoxed As Boolean) As Integer

    Dim n As Integer
    Dim objRange As Range
    
    Set objRange = ThisDocument.Range
    
    objRange.Find.Forward = True
    objRange.Find.text = text
    
    n = 0
    Do While True
        objRange.Find.Execute
        If objRange.Find.Found Then
            If Not onlyBoxed Or objRange.Font.Borders(1).LineStyle = wdLineStyleSingle Then
                n = n + 1
            End If
        Else
            Exit Do
        End If
    Loop

    CountChars = n

End Function

参考

Word ドキュメントで二重の角かっこ内のすべての単語を検索する方法はありますか

id:garyo

ありがとうございます。ばっちりです。

目的はソフトウエアのチェックリストで以下を数えたかったのでした。

□←未実行のテストケース

囲みレ←OKのテストケース

実績を計算するために数えるのが面倒だったので助かりました。

後は

囲み×←NGのテストケースが出来れば完璧そうです。

2007/11/01 08:48:20
id:airplant No.2

airplant回答回数220ベストアンサー獲得回数492007/11/01 02:36:31

ポイント50pt

VBScriptでできます。

次のコードをxxx.vbsで保存して、カウントしたいWordファイルをxxx.vbsへドラッグしてください。

No.2対応

Option Explicit

Const wdReplaceNone = 0
Dim objWord, objDoc, objSelection, Cnt

Set objWord = CreateObject("Word.Application")
objWord.Visible = True

Set objDoc = objWord.Documents.Open(Wscript.Arguments(0))
Set objSelection = objWord.Selection

With objSelection.Find
    .Text = "□"
'    .Font.Borders(1).LineStyle _
'        = objWord.Options.DefaultBorderLineStyle
    .Forward = True
    .MatchByte = False

    Cnt = 0
    Do While True
        If .Execute(, , , , , , , , , , wdReplaceNone) Then
            Cnt = Cnt + 1
        Else
            Exit Do
        End If
    Loop
    Wscript.Echo .Text & " : " & Cnt
End With

No.2対応は、Withの下の行を次のように変えてください。

    .Text = "レ"
    .Font.Borders(1).LineStyle _
        = objWord.Options.DefaultBorderLineStyle

●前提

  • Windowsを利用
  • ファイルは1つだけ(複数の場合はfor eachにして、wordのクローズを入れれば大丈夫です→サンプルはhttp://q.hatena.ne.jp/1184828776#a739529
  • No.1は□をカウント、No.2はレを囲み文字にしたものをカウント
  • レの前後は文字有無に関係なし
  • レは全角、半角の両方が対象
  • カウントのみ。

→本当はカウントした後で何か変換をしたいのではないでしょうか?

もしかして、□とレの囲みと同時にチェックしたいのであれば、少し的外れな回答だったかも知れません。

id:garyo

ありがとうございます。m(__)m

2007/11/01 08:48:53
  • id:ardarim
    回答のサンプルプログラムで
    CountChars("×", True)
    とすれば囲み×も数えられますよ。

    CountCharsはできるだけ汎用に使えるよう作ってあるので、任意の文字(列)を検索します。2つ目の引数はFalseなら囲みに関係なく文字(列)に一致する全ての数を、Trueなら文字(列)に一致する囲みの数だけを返します。

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

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

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

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