【Word VBA】カーソルがある箇所の特許段落番号を取得するWordマクロ

2017年12月28日

翻訳の納品コメントを書いている時に、対応する段落番号を取得したいと感じました。

カーソルがある箇所の段落番号がわかるとなにかと便利で応用がきくと思います。

特許明細書の見出しは特定の書式で書かれているので、そのルールさえ分かれば比較的簡単に見出しを取得できます。

今回のコードはメッセージボックスに表示するだけなのであまり意味はないかも知れませんが、サンプルコードとしてご利用ください。

このマクロでできること

カーソルがある箇所がどの段落番号や見出しに関連するのかを調べ、メッセージボックスで表示します。

例1 段落番号のある段落の場合

例2 見出しのある段落の場合

マクロの解説

段落から文字列を取り出す方法としてちょうどいい例だと思います。

和文特許明細書の場合、段落番号や見出しが隅付き括弧("【"と"】")で囲まれています。英文明細書の場合は半角の角括弧("["と"]")で囲まれています。

このように特許明細書の場合には比較的わかりやすいので見出しとなる文字列を探す方法を確立できます。

ほかのルールを適用する場合には処理方法を別に考える必要があります。

処理としては、カーソル位置の段落から始まり(13行目)、段落の先頭に特許段落番号が見つからない場合にはひとつずつ上の段落に向けて(29行目)処理をします。

段落先頭の段落番号の有無を判定するために、まずはMoveStartWhile メソッドにて段落先頭のタブやスペースを除外します(24行目)。

括弧の有無を確認します。このためにLike 演算子を使います(25行目)。

Like 演算子では正規表現のような記述ができます。選択範囲の一文字目(myParaRange.Characters.First.Text)が【または[ であるかを判定するために、[【^[] としています。

Wordのワイルドカードを使うと [【\[] という意味ですから記述が似ています。

見つけた場合には、閉じ括弧まで選択範囲を狭めれば段落番号や見出しを取得できます(26行目)。

3行目をコメントにして4行目のコメントを解除すれば、ステータスバーに段落番号を表示できるようになります。

マクロ


Sub 特許段落番号を表示するマクロ()

 MsgBox GetHeading(Selection.Range)
' Application.StatusBar = GetHeading(Selection.Range)
 
End Sub

Function GetHeading(myRange As Range) As String
 
 Dim myPara As Paragraph
 Dim myParaRange As Range
 
 Set myPara = myRange.Paragraphs(1)
 
 Do
  
  If myPara Is Nothing Then
   myParaRange.SetRange 0, 0
   Exit Do
  End If
  
  Set myParaRange = myPara.Range
  
  myParaRange.MoveStartWhile Cset:=vbTab & Chr(32) & Chr(-32448)
  If myParaRange.Characters.First.Text Like "[【^[]" Then
   myParaRange.MoveEndUntil Cset:="】]", Count:=wdBackward
   Exit Do
  Else
   Set myPara = myPara.Previous
  End If
 
 Loop
 
 GetHeading = myParaRange.Text
 
 If GetHeading = "" Then
  GetHeading = "見つかりませんでした。"
 End If
 
 Set myPara = Nothing
 Set myParaRange = Nothing
 
End Function

-コード
-, ,