HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > コメントが追加されているかを判定する(Commentプロパティ)

コメントが追加されているかを判定する(Commentプロパティ)|Excel VBA

セル操作関連のテクニック

コメントが追加されているかを判定する(Commentプロパティ)

(Excel 97/2000/2002/2003/2007/2010/2013)

セルにコメントを追加するには、RangeオブジェクトのAddCommentメソッドを使用します。
次のコードはセルA1にコメントを追加します。

Sub Sample1()
    Range("A1").AddComment "これはコメントです"
End Sub

ただし、このコードには問題がひとつ。
セルにすでにコメントがある場合、実行時エラーになってしまいます。
1つのセルにコメントは1つしか追加できないからです。

エラーを回避するには、そのセルに「すでにコメントが追加されているか」を判定すればよいでしょう。コメントの有無は、次のように判定できます。

Sub Sample2()
    If TypeName(ActiveCell.Comment) = "Comment" Then
        MsgBox "コメントあり"
    Else
        MsgBox "コメントなし"
    End If
End Sub

RangeオブジェクトのCommentプロパティは、セルにコメントが追加されているとき、そのセルのCommentオブジェクトを返します。
また、TypeName関数は、引数に指定した変数のタイプを返す関数です。
引数にオブジェクトを指定すると、そのオブジェクトの種類を返します。
そこで、セルにコメントが追加されている場合、TypeName関数は "Comment" という文字列を返し、コメントがなければ "Nothing" という文字列を返します。

これを使って「もしセルにコメンがなかったらコメントを追加する」という動作を実現するには、次のようになります。

Sub Sample3()
    If TypeName(ActiveCell.Comment) = "Nothing" Then
        ActiveCell.AddComment "これはコメントです"
    End If
End Sub

次のようにすると、もともとあるコメントに追記することも可能です。

Sub Sample4()
    Dim tmp As String
    With ActiveCell
        If TypeName(.Comment) = "Nothing" Then
            'セルにコメントがない場合
            .AddComment "これはコメントです"
        Else
            '既にコメントがある場合、いったん削除してから追加
            tmp = .Comment.Text
            .ClearComments
            .AddComment tmp & vbCrLf & Date & " 追記します"
        End If
    End With
End Sub