- 締切済み
ワードマクロで指定範囲内の改行の数を調べたいと思っています。下記のよう
ワードマクロで指定範囲内の改行の数を調べたいと思っています。下記のような記述をしました。改行マークのない文を指定(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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
通常は、そのような改行の数は、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)
Word VBAは●使ったことがない●ので考え方だけ。。。 選択範囲の中から改行文字を検索するのではなくて 選択範囲の中の改行文字を長さ0の文字列に置換して その文字数を選択範囲の文字数から引いてやるのはどうでしょう。 '------------------------------- Sub test() Dim N As Long N = Len(Selection) - Len(Replace(Selection, vbCr, "")) MsgBox N End Sub '------------------------------ 以上です。