Wordに挿入されたコメントが必要ないときありますよね。
クライアントに納品するファイルへのコメント挿入ができない場合には一括して削除するのがいいと思います。
自分のメモ用のコメントを部分的に削除したり書き換えたりする場合には、簡単に削除できるとうれしいですね。
私は、ショートカットキーにカーソル位置のコメントを削除するコマンド(DeleteAnnotation)を登録しており、ショートカットキーでコメントを削除できるようにしています。
ショートカットキーにコマンドやマクロを登録する方法はこちらの動画をご覧ください。
このたび、セミナーの受講生の方から選択範囲内のコメントを削除したいという問い合わせがありまして、作ってみました。
<目次>
このマクロでできること
選択範囲内のコメントを削除します。
選択範囲内にコメントがない場合には実行しません。
実行前
実行後
マクロの解説
マクロ1では、For Next ステートメントを使いました。
ここで注意が必要です。このように処理対象となるオブジェクトを削除する記述の場合には、降順に処理を進めます。(8行目~10行目)
For i = iMax To 1 Step -1 Selection.Comments(i).Delete Next
以下のように昇順で処理をすると、処理につれて選択範囲内のコメント数が減り、その結果、数字が大きくなったときに選択範囲内の処理対象のコメントを指定できなくなります。
For i = 1 To iMax Selection.Comments(i).Delete Next
今回の例のように、選択範囲内に2つのコメントがある場合、Selection.Comment(1)で1つ目を削除した後に2つ目のコメントをSelection.Comment(2)で指定しようとします。
でも、1つ目のコメントを削除した結果、選択範囲内にはコメントが1つしかないので、Selection.Comment(2)が存在しないため指定できなくなってしまいます。
この場合、エラーになります。
Excelの行の削除処理でよくある典型的な処理のルールなので覚えておきましょう。
マクロ2では、いつものFor Each Nextステートメントを使いました。シンプルでわかりやすいと思って作りました。
ところが、これはうまく動作しませんでした。削除処理がある場合には王道のFor Next ステートメントのほうがいいですね。
実行前
実行後
選択範囲よりも前に挿入されたコメントも削除されてしまいます。
マクロ1
Sub 選択範囲内のコメントを削除する1() Dim i As Integer Dim iMax As Integer iMax = Selection.Comments.Count For i = iMax To 1 Step -1 Selection.Comments(i).Delete Next End Sub
マクロ2
Sub 選択範囲内のコメントを削除する2() Dim myComment As Comment For Each myComment In Selection.Comments myComment.Delete Next End Sub