プロが教えるわが家の防犯対策術!

5年ぐらい前まではエクセルVBAを使っていたのですが、ワードでちょっとしたマクロを作ろうと思って愕然...すっかり忘れています。
勉強しなおす暇が今はありません。どうか助けてくださいませ。
やりたいことは;
1)日本語や英語の文章中(最大5ページ程度)、下線部の数を数える。
2)(できれば)下線部を新文書に抽出する
3)ピリオドや句点や?の数を数え、文(sentences)の数を出す。

以上なのです。
文章の対象を定めて、定義づけして、下線部分の有無をIFで調べて、countを使って...と考えてみたのですが、お手上げでした。1)と3)も似たようなスクリプトでできるとは思うのですが...
どうぞ、よろしくお願いいたします。

A 回答 (2件)

こんにちは。



まず、Excel VBAと Wordとは考え方が違いますから、VBAやOffice の部分は似ていても、Word固有のオブジェクトなど考え方がまったく違います。5年前に戻れれば、私たちは学ぶことが出来たかもしれませんが、Word VBAは、もう、なかなか手の届かない存在です。

1 ~2 ですが、これは、単語単位です。つまり、下線というのは、単語に対して付けられるもので、その延長に、助詞や接続詞がありますが、それらとは切り分けられます。


ピリオドや句点
   ↓
ピリオド, 句点



Sub CollectinUnderLined_Words()
Dim ColWords() As String
Dim i As Long
Dim w As Variant
 For Each w In ActiveDocument.Words
  If w.Underline = 1 Then 'wdUnderlineSingle 'シングルの下線
   If Len(w.Text) > 1 Then
   ReDim Preserve ColWords(i)
   ColWords(i) = w.Text
   i = i + 1
   End If
  End If
 Next w
 Application.Documents.Add DocumentType:=wdNewBlankDocument
 ActiveDocument.Content.InsertAfter Text:=Join(ColWords, " ,")

End Sub


3に関しては、私は、Sentence の概念は、良く分かりませんが、行とは食い違いが出るようです。

Sub getSentencesCount()
Dim mySentence As Long
 With ActiveDocument
  .Repaginate
  mySentence = .Sentences.Count
  MsgBox mySentence & " 文"
 End With
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
早速試してみました!すごい!文の数が出てきます~。
Sentenceというオブジェクトがあるんですね。
一度しっかりWord VBA挑戦したいです。

お礼日時:2007/07/10 00:13

>5年ぐらい前まではエクセルVBAを使っていたのですが


>愕然...
年月が経ったからではないと思う。ワードVBAはエクセルVBAとはまったく別物で、エクセルのVBAの経験は役立たないと思う。解説書や教えていただける方も少ない、独学しにくい分野で、私も少ししか判りません。
ーー
Sub test10()
Dim wd As Object
For Each wd In ActiveDocument.Words
'MsgBox wd
If wd.Font.Underline = wdUnderlineSingle Then
MsgBox wd
End If
Next
End Sub
何かの文書に下線(単下線)を数箇所引いて、上記を実行してみてください。
問題点は
(1)MSワードの区切る、文章の切断方式の結果の「Words」が、質問者の考える区切りと一致するか。私には、区切りはどういう仕組みか良くわからない。
上記コードのコメント化した第4行目を、コメントをはずして実行し考えてください。次々とwordsを表示できます。
(2)MSワードの認める下線の種類が、数種類あるが、複数の種類を使っているとき対処が必要。Or で結べば対処できると思うが。
ーー
上記で大筋で、意にかなうなら、後は、WEB、マクロの記録、ヘルプででも、勉強してください。
    • good
    • 0
この回答へのお礼

Syntaxは大体同じで、語彙が違う。。。フランス語とスペイン語のような感じでしょうか。

早速実行してみました。下線部がちゃんとMsgBoxで上がってきました。すごい~。
Wordでは、日本語でも形態素(単語の種類)をちゃんと認識しているみたいなので大丈夫そうです。

勉強します。

お礼日時:2007/07/10 00:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!