• 締切済み

ワードマクロで指定範囲内の改行の数を調べたいと思っています。下記のよう

ワードマクロで指定範囲内の改行の数を調べたいと思っています。下記のような記述をしました。改行マークのない文を指定(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

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

Word VBAは●使ったことがない●ので考え方だけ。。。 選択範囲の中から改行文字を検索するのではなくて 選択範囲の中の改行文字を長さ0の文字列に置換して その文字数を選択範囲の文字数から引いてやるのはどうでしょう。 '------------------------------- Sub test()  Dim N As Long  N = Len(Selection) - Len(Replace(Selection, vbCr, ""))  MsgBox N End Sub '------------------------------ 以上です。

関連するQ&A

専門家に質問してみよう