Word VBAを使って、コメントで選択された文章を修正するマクロを作成したいとき、Comment.Scope プロパティを活用した修正の動作確認メモです。
内容:
動作確認のWordは「Microsoft® Word for Microsoft 365 MSO」(バージョン2501)です。
動作確認の背景
Word文書の編集時、文章にコメントをつけることはできますが、選択範囲の文章を修正すると、コメントで選択された文章範囲が意図した通りに動作しないことがあります。手作業での変更方法は次のとおりですが、マクロの場合の動作確認をしました。
確認した内容
コメントで選択された文章を修正する場合に利用できるComment.Scope プロパティで動作確認をしました(参考: Comment.Scope プロパティ (Word) | Microsoft Learn
)。
結論としては、コメントの選択範囲を維持したまま、選択された文章を修正するには、前述の手作業と同様の処理をVBAでも記述が必要でした。。
要は、範囲の一文字目(両端)を修正すると、範囲外になってしまうため、二文字目以降で調整するな処理がVBAでも必要ということです。
動作テストの文書
動作確認で3パターンの処理結果を比較するため、次のとおり、同じ文章が3つあり、同様の箇所にコメントがある文書を用意しました。コメントは合計3つあり、それぞれは「1番目の置換対象」「2番目の置換対象」「3番目の置換対象」というコメントをつけています。
動作テストのコード
Comment.Scope プロパティを使って次の3パターンで文字列の置換処理をします。
- 1番目の置換対象は、Scope.StartとEndで、両端を一文字調整する方法
-
2番目の置換対象は、Scope.StartとEndのままで修正する方法
-
3番目の置換対象は、Scope.Text で修正する方法
具体的には、次のコードで、コメント内容を検索し、条件に合致するコメントが選択している文章を修正します。
例えば、一つ目のコメントは、"1番目の置換対象"を含むコメントとして条件に合致し、選択範囲の文字列”コードの形式”を"●●●"に置換しています。
Sub コメントに選択された文章の置換() Dim コメント As Comment For Each コメント In ActiveDocument.Comments '1番目の置換対象' If InStr(コメント.Range.Text, "1番目の置換対象") > 0 Then ActiveDocument.Range(コメント.Scope.Start + 1, コメント.Scope.End - 1).Text = "●●●" ActiveDocument.Range(コメント.Scope.Start, コメント.Scope.Start + 1).Delete ActiveDocument.Range(コメント.Scope.End - 1, コメント.Scope.End).Delete End If '2番目の置換対象' If InStr(コメント.Range.Text, "2番目の置換対象") > 0 Then ActiveDocument.Range(コメント.Scope.Start, コメント.Scope.End).Text = "▲▲▲" End If '3番目の置換対象' If InStr(コメント.Range.Text, "3番目の置換対象") > 0 Then コメント.Scope.Text = "■■■" End If Next コメント End Sub
動作テストの結果
上記マクロの実行結果は次のとおりで、冒頭の結論のとおり、1番目の置換対象でテストした「Scope.StartとEndで、両端を一文字調整する方法」のみコメントの選択範囲を維持できました。
2番目、3番目のコメントは、コメントで選択された文章は修正後の文章が含まれていません。
つまり、コメントの選択範囲を維持する必要がない場合は、簡単なScope.Textでの置換で良さそうです。
以上、WordのVBAで、コメントで選択された文章を修正するマクロの動作確認でした。