ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。

ワードマクロで指定範囲内の改行の数を調べたいと思っています。下記のような記述をしました。改行マークのない文を指定(selection)して実行すると、予定通り、n=0となるのですが、改行マークのある箇所を指定すると、文章全体の改行の数を調べてしまいます。

改行の意味で「vbCr」を使用しましたが、それが問題なのでしょうか?また、改行が入るとselectionが無効になるのでしょうか?
どなたか教えてください。よろしくお願いします。

Sub test()

Dim n As Integer

Do While Selection.Find.Execute(findtext:=vbCr, Forward:=True) = True
n = n + 1
Loop
MsgBox (n)

End Sub

A 回答 (2件)

通常は、そのような改行の数は、MS-Wordで、カウントするようなことはしませんが、



今回の場合は、

>改行マークのない文を指定(selection)して実行すると、予定通り、n=0となるのですが、改行マークのある箇所を指定すると、文章全体の改行の数を調べてしまいます。

ドキュメントの検索からだと、Selection の終わりを認識しますが、VBAからだと、そのまま先に行ってしまいます。以下のようにすれば良いかと思います。それと、MS-WordのVBAは、あまり省略しないほうが良いようです。それと、MS-Wordには、Cr と Lf があるはずですが、今回は、あくまでも、1つにしました。

'//
Sub CountCR()
 Dim flgFound As Boolean
 Dim iCount As Long
 Dim rng As Range
 Dim d As Long, e As Long
 
 Set rng = Selection.Range
 e = rng.End
 iCount = 0
 Do While e >= d
  With rng.Find
   .ClearFormatting
   .Text = "^13"
   .Wrap = wdFindStop
   .MatchFuzzy = False '←ここと
   .MatchWildcards = True '←ここが大事
   .Execute
  End With
  d = rng.Start
  flgFound = rng.Find.Found
  If d > e Then Exit Do
  If flgFound = True Then iCount = iCount + 1
 Loop
 MsgBox iCount & "個見つかりました。"
 Set rng = Nothing
End Sub
    • good
    • 0

Word VBAは●使ったことがない●ので考え方だけ。

。。

選択範囲の中から改行文字を検索するのではなくて
選択範囲の中の改行文字を長さ0の文字列に置換して
その文字数を選択範囲の文字数から引いてやるのはどうでしょう。

'-------------------------------
Sub test()
 Dim N As Long
 N = Len(Selection) - Len(Replace(Selection, vbCr, ""))
 MsgBox N
End Sub
'------------------------------

以上です。
    • good
    • 0

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