【ExcelVBA・マクロ】セルコメント(メモ)の使い方|一括追加・編集・削除する方法【コピペOK】

ExcelVBA

セルコメント(メモ)とは

Excelのセルには、セルの内容を補足する「コメント」(Excel 2019以降のバージョンでは「メモ」という名称)を付けることができます。入力ルールの補足や、データの根拠、確認済みかどうかのメモなど、セルの値そのものを変えずに情報を追加したいときに便利な機能です。

このコメント(メモ)はVBAのCommentオブジェクトとAddCommentメソッドで操作できます。この記事では、コメントの追加・編集・削除・一覧取得を一括で行う方法を、実際に動作するサンプルコードとともに解説します。

※ Excel 2019/Microsoft 365では「コメント」機能が新しい「スレッド形式のコメント」に変わり、従来型のコメントは「メモ」という名称になりました。VBAのCommentオブジェクトは、この「メモ」を操作するものです。

スポンサーリンク
スポンサーリンク

コメントを1つ追加する

Range.AddCommentメソッドを使うと、セルにコメントを追加できます。

Sub AddSingleComment()

    With Sheet1.Range("A1")
        If Not .Comment Is Nothing Then .Comment.Delete
        .AddComment "この列は自動計算されるため、直接入力しないでください。"
    End With

End Sub

すでにコメントが設定されているセルにAddCommentを実行するとエラーになるため、If Not .Comment Is Nothing Then .Comment.Deleteで既存のコメントを一度削除してから追加しています。

複数セルにまとめてコメントを追加する

対象範囲をループしながら、条件に応じてコメントを一括追加することもできます。

Sub AddCommentsInBulk()

    Dim targetRange As Range
    Set targetRange = Sheet1.Range("B2:B20")

    Dim cell As Range
    For Each cell In targetRange
        If cell.Value >= 100 Then
            If Not cell.Comment Is Nothing Then cell.Comment.Delete
            cell.AddComment "基準値(100)を超えています"
        End If
    Next cell

End Sub

このコードでは、B2:B20の範囲を1セルずつチェックし、値が100以上のセルにだけ「基準値を超えています」というコメントを付けています。異常値の可視化やチェック漏れ防止に応用できます。

コメントの内容を編集する

既存のコメントの文言を書き換えたい場合は、Comment.Textメソッドを使います。

Sub EditCommentText()

    Dim target As Range
    Set target = Sheet1.Range("A1")

    If target.Comment Is Nothing Then
        target.AddComment "初回コメントです"
    Else
        target.Comment.Text Text:="内容を更新しました"
    End If

End Sub

コメントが存在しない場合は新規追加、存在する場合は内容を上書きするという分岐にしておくと、実行するたびにエラーで止まることがなく安全です。

コメントの見た目を調整する(サイズ・自動調整)

コメントの吹き出しはComment.Shapeプロパティ経由でサイズや位置を調整できます。文字数に応じて自動的にサイズを合わせたい場合はShape.TextFrame.AutoSizeを使います。

Sub FormatCommentShape()

    Dim target As Range
    Set target = Sheet1.Range("A1")

    If Not target.Comment Is Nothing Then target.Comment.Delete
    target.AddComment "長めのコメントを入力した場合でも、吹き出しのサイズが自動的に調整されるようにします。"

    With target.Comment.Shape
        .TextFrame.AutoSize = True
    End With

End Sub

AutoSize = Trueを指定しておくと、コメントの文字数に合わせて吹き出しの大きさが自動調整されるため、文字が枠からはみ出す心配がありません。

シート内のコメントを一覧取得する

シート内にあるコメントをまとめて確認したい場合は、Worksheet.Commentsコレクションをループします。

Sub ListAllComments()

    Dim cmt As Comment
    For Each cmt In Sheet1.Comments
        Debug.Print cmt.Parent.Address & " : " & cmt.Text
    Next cmt

End Sub

cmt.Parentはそのコメントが付いているセル(Range)を指すため、Addressプロパティでセル番地を、Textメソッドでコメント内容を取得できます。イミディエイトウィンドウに、どのセルにどんなコメントが付いているかが一覧表示されます。

コメントを一括削除する

シート内のすべてのコメントをまとめて削除したい場合は、Commentsコレクションを末尾から逆順にループして削除します。

Sub DeleteAllComments()

    Dim i As Long
    For i = Sheet1.Comments.Count To 1 Step -1
        Sheet1.Comments(i).Delete
    Next i

End Sub

先頭から順に削除すると、削除した分だけコレクションの要素がずれて一部を処理し損ねることがあるため、逆順でループするのが安全な定石です。

セルにコメントが付いているかどうかを判定する

コメントの有無で処理を分けたい場合は、CommentプロパティがNothingかどうかで判定します。

Function HasComment(target As Range) As Boolean
    HasComment = Not target.Comment Is Nothing
End Function

Sub CheckCommentExists()

    If HasComment(Sheet1.Range("A1")) Then
        MsgBox "A1にはコメントがあります: " & Sheet1.Range("A1").Comment.Text
    Else
        MsgBox "A1にはコメントがありません"
    End If

End Sub

Rangeは複数セルの場合Commentプロパティがエラーになることがあるため、単一セルに対して使うようにしてください。

注意点

  • 既存コメントがあるとAddCommentはエラーになる:追加する前に必ずComment Is Nothingかどうかを確認し、既存のコメントがあればDeleteしてから追加しましょう。
  • Comment.Textはメソッドとして呼び出す:プロパティのように.Comment.Text = "内容"と代入することはできず、.Comment.Text Text:="内容"のようにメソッド呼び出しの形で指定します。
  • 結合セルではコメントの位置がずれることがある:結合セルにコメントを追加すると、吹き出しの表示位置が意図しない場所になる場合があります。
  • スレッド形式の新しいコメントは対象外:Excel 2019以降で追加された「スレッド形式のコメント」(返信・メンション機能付き)は、Commentオブジェクトの対象外です。VBAで扱えるのは従来型の「メモ」のみです。

まとめ

VBAでセルコメント(メモ)を操作する方法を解説しました。

  • 追加はRange.AddComment、削除はComment.Delete
  • 既存コメントがある状態でAddCommentするとエラーになるため事前削除が必須
  • 内容変更はComment.Text Text:="内容"とメソッド形式で指定する
  • 一覧取得はFor Each cmt In Worksheet.Commentsでループ
  • 一括削除は末尾から逆順にループするのが安全

コメント(メモ)はセルの値を変えずに補足情報を残せる便利な機能です。チェック結果や確認事項の記録を自動化したい場合は、ぜひCommentオブジェクトの操作を活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました