【Word VBA】条番号にジャンプする

2016年6月23日

前回の記事「【Word】法務文書の条番号の表記を統一するワイルドカード」に少し関連したマクロです。

先日の「Wordで上書き翻訳セミナー」の受講生からお題をいただき、作ってみました。

この上書き翻訳セミナーでは、特許の段落番号にカーソルを移動させるマクロを紹介しました。

こちらの記事で紹介されているマクロをベースにしたものです。

【コード】日英特許明細書の段落番号を探す(改良版)

法務翻訳の条番号でも同じようなことをしたい!とのことだったので(気持ちよく分かります(笑))、さっそく作ってみました。

もちろん、英文でも和文でもどちらでも使えるように作ってみました。

このマクロでできること

マクロを実行すると、条番号を入力するためのインプットボックスが表示されます。

16-06-231

数字を入力すると、先頭から検索を開始して一番最初に見つかった「段落先頭に記載されている条番号」にカーソルを移動します。

ここでいう条番号とは、以下のものです。

Article 1
第1条

数字は、全角でも半角でも関係なく検索できます。また、大文字・小文字も区別しません。

マクロの解説

インプットボックスに入力した文字列が数値であるかどうかを判定するために、IsNumeric関数を使用しています。

条番号のパターンを英語表記と日本語表記とでいくつか用意しています。この文字列を検索します。

このパターンのいずれかに合致した場合にその位置にカーソルが移動します。

条番号のパターンの先頭に ^p と入れてあります。これが段落先頭の意味です。

このマクロでは、あくまでも文書中に条番号が1箇所だけに現れることを前提にしています。

複数の段落先頭に同一の条番号が記載されている場合、いずれか1つだけにカーソルが移動するということになってしまいます。

この点はご注意ください。

検索条件は、大文字小文字の区別なし、全角半角の区別なしで検索しています。

なので、Findオブジェクトでの条件設定をしていません。設定をしない場合、項目はFalse として扱われます。

可読性を高めるためには、1つ1つの設定(TrueとFalse)をきちんと書いた方がいいかもしれません。

マクロ


Sub 条番号へジャンプ()

 Dim myNumber As Variant '条番号の入力
 Dim myFind(7) As String '条番号のパターン(英日)
 Dim i As Integer
 Dim blnFound As Boolean
 Dim myMessage As String 'メッセージ
 Dim myTitle As String  'タイトル
 Dim myRange As Range  'Rangeオブジェクト

 '-------------------------------------------
 '条番号の入力
 '-------------------------------------------
 myMessage = "番号を入力して下さい。" & vbCr _
             & "(半角・全角どちらでも可)"
 myTitle = "条番号へジャンプ"

 Do
   myNumber = InputBox(myMessage, myTitle)
   If myNumber = vbNullString Then End
 Loop While IsNumeric(myNumber) = False Or _
       myNumber < 1

 '-------------------------------------------
 '条番号のパターン(英語、日本語)
 '-------------------------------------------
 myFind(1) = "^particle " & myNumber & " "
 myFind(2) = "^particle " & myNumber & vbCr
 myFind(3) = "^particle " & myNumber & vbTab
 myFind(4) = "^p第" & myNumber & "条"
 myFind(5) = "^p第 " & myNumber & " 条"
 myFind(6) = "^p第 " & myNumber & "条"
 myFind(7) = "^p第" & myNumber & " 条"

 '-------------------------------------------
 '検索実行
 '-------------------------------------------
 blnFound = False

 For i = 1 To UBound(myFind)

  Set myRange = ActiveDocument.Range(0, 0)

  With myRange.Find
   .Text = myFind(i)
   .Forward = True
   .Wrap = wdFindContinue
   .Format = False
   If .Execute = True Then
    blnFound = True
    Exit For
   End If
  End With

 Next i

 '-------------------------------------------
 '見つけた場合にジャンプ
 '-------------------------------------------
 If blnFound = True Then
  Selection.EndKey Unit:=wdStory
  myRange.Select
  If Selection.Characters.Last = vbCr Then
   Selection.MoveEnd Unit:=wdCharacter, Count:=-1
  End If
  Selection.Collapse direction:=wdCollapseEnd
 Else
  MsgBox "条番号:" & myNumber & _
      " は見つかりませんでした。", _
  vbInformation, "検索結果のお知らせ"
 End If

 '-------------------------------------------
 'オブジェクトの解放
 '-------------------------------------------
 Set myRange = Nothing

End Sub

関連記事

【Word】法務文書の条番号の表記を統一するワイルドカード

【Wordマクロ】日英特許明細書の段落番号を探すマクロ(改良版)

-コード
-,