【Word VBA】選択範囲内のコメントを次の段落に移動するWordマクロ

2018年10月17日

現在、Wordで動く翻訳チェックソフト「色deチェック」の修正をしています。

最近ユーザーさんから特許明細書の対訳表を作成に関していただいた要望に、以下のようなものがありました。

段落番号にコメントが挿入されているとその段落を対訳表に抜き出せないので修正をして欲しい、とのことでした。

そうなのです。コメントが挿入されている箇所については、ワイルドカードでの検索ができなくなります。

参考:【Word】ワイルドカードを使う場合の注意点(その2)

対訳表を作成する際にワイルドカードを用いて段落番号を検索しています。そおため、コメントが挿入された段落番号を検索できないためにその段落を抜き出せないという不具合になっておりました。

次のバージョンで修正されます。

そのときに使ったのが今回紹介するマクロです。

「コメントが邪魔だけどとりあえず残しておきたい!」というようなときに使えるかも知れません。

このマクロでできること

以下のようにコメントが挿入されています。

移動したいコメントを選択します。

この状態でマクロを実行すると以下のように次の段落の先頭の1文字目に全てのコメントが移動します。

コメントへの返信も移動していますが、返信先との関係は崩れてしまいます。

マクロの解説

特定の範囲内のコメントの指定は、For Each Nextステートメントではなく、For Nextステートメント を使いましょう(15行目~21行目)。

参考:【コード】選択範囲内のコメントを削除するWordマクロ 

コメントの移動先は、カーソルがある段落の次の段落です。

13行目に示したとおり、Selection.Paragraphs.Last.Next.Range とするとRangeオブジェクトとして指定できます。

マクロ


Sub 選択範囲内のコメントを次の段落の先頭に移動する()

 Dim myComment As Comment
 Dim myRange As Range
 Dim i As Integer
 Dim iMax As Integer
 
 If Selection.Comments.Count = 0 Then
  Exit Sub
 End If
 
 iMax = Selection.Comments.Count
 Set myRange = Selection.Paragraphs.Last.Next.Range
 
 For i = iMax To 1 Step -1
  Set myComment = Selection.Comments(i)
  With myRange.Characters
   .First.Comments.Add .First, myComment.Scope.Text & ": " & myComment.Range.Text
  End With
  myComment.Delete
 Next
 
 Set myRange = Nothing
 Set myComment = Nothing
 
End Sub

関連記事

【Word】ワイルドカードを使う場合の注意点(その2)

【コード】選択範囲内のコメントを削除するWordマクロ 

-コード
-, ,