【Word VBA】現在のカーソル位置の段落番号を取得するWordマクロ

2011年6月16日

カーソル位置の段落番号を取得する方法です。

Word VBAでは、文書中の段落の総数を取得することはできるのですが、現在のカーソル位置が、文書中の何番目の段落にあるのかを数えるものは用意されていません。

以前の勉強会で、段落の番号を取得するための方法を聞かれたことがございましたので、どなたかのお役に立てるのかもしれません。

マクロの解説

泥臭い方法ですが、文書の先頭からカーソル位置(文字列が選択されている場合には、選択範囲の末尾位置)までに含まれる段落を数えて、その数をカーソル位置の段落番号としています。

マクロ1~マクロ3は同じ事をしていますが、別の記載にしてみました。

マクロ1では、Start プロパティとEnd プロパティを用いています。
ここに値を入れることで、Rangeオブジェクトの対象範囲や、Selectionオブジェクトの選択範囲を変更できます。

マクロ2では、SetRange というメソッドを用いています。削除(20130309)
Rangeオブジェクトの対象範囲や、Selectionオブジェクトの選択範囲を変更するのに便利なメソッドです。

マクロ3では、With ステートメントを用いています。
可読性(Code Readability)が上がります。

もう少し複雑なものになれば、その効果はわかりやすいと思います。
With ステートメントは、名古屋の勉強会のテーマでもあったので、あえてブログで紹介してみました。

マクロ1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub CountParagraphNumber()
 
  Dim myParaNum As Integer '段落番号
  Dim myRange As Range   '段落のカウント用
 
  Set myRange = Selection.Range
  myRange.Start = 0
  'myRange.End = Selection.End ’これ不要でした。(20130309)
  myParaNum = myRange.Paragraphs.Count
 
  MsgBox "カーソル位置の段落:" & myParaNum
 
  Set myRange = Nothing
 
End Sub

 

マクロ2

1
2
3
4
5
6
7
8
9
10
11
12
Sub CountParagraphNumber2()
 
  Dim myRange As Range   '段落のカウント用
 
  Set myRange = Selection.Range
  'myRange.SetRange Start:=0, End:=Selection.End 'これ不要でした。(20130309)
  myRange.Start = 0
  MsgBox "カーソル位置の段落:" & myRange.Paragraphs.Count
 
  Set myRange = Nothing
 
End Sub

マクロ3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub CountParagraphNumber3()
 
  Dim myRange As Range   '段落のカウント用
 
  Set myRange = Selection.Range
 
  With myRange
    '.SetRange Start:=0, End:=Selection.End 'これ不要でした。(20130309)
    .Start = 0
    MsgBox "カーソル位置の段落:" & .Paragraphs.Count
  End With
 
  Set myRange = Nothing
 
End Sub

関連記事

海外でも同じようなニーズがありまして、いくつか記事が公開されています。

Word VBA: Getting the Index Number of the Current Paragraph

Get Line and Paragraph Number

-コード
-,

S