- ベストアンサー
ワードVBA 下線部のついた部分を数えたいのですが
5年ぐらい前まではエクセルVBAを使っていたのですが、ワードでちょっとしたマクロを作ろうと思って愕然...すっかり忘れています。 勉強しなおす暇が今はありません。どうか助けてくださいませ。 やりたいことは; 1)日本語や英語の文章中(最大5ページ程度)、下線部の数を数える。 2)(できれば)下線部を新文書に抽出する 3)ピリオドや句点や?の数を数え、文(sentences)の数を出す。 以上なのです。 文章の対象を定めて、定義づけして、下線部分の有無をIFで調べて、countを使って...と考えてみたのですが、お手上げでした。1)と3)も似たようなスクリプトでできるとは思うのですが... どうぞ、よろしくお願いいたします。
- みんなの回答 (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
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
>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、マクロの記録、ヘルプででも、勉強してください。
お礼
Syntaxは大体同じで、語彙が違う。。。フランス語とスペイン語のような感じでしょうか。 早速実行してみました。下線部がちゃんとMsgBoxで上がってきました。すごい~。 Wordでは、日本語でも形態素(単語の種類)をちゃんと認識しているみたいなので大丈夫そうです。 勉強します。
お礼
ご回答ありがとうございました。 早速試してみました!すごい!文の数が出てきます~。 Sentenceというオブジェクトがあるんですね。 一度しっかりWord VBA挑戦したいです。