コメントの挿入
「セルに注意書きや補足を付けたい」「提出前にメモを残したい」—セルコメント(旧来の“メモ”)をVBAで安全に追加・編集・削除する方法を、初心者向けテンプレートと例題でまとめます。基本は Range.AddComment、存在チェックは Range.Comment、表示制御は Comment.Visible を使います。Excelのバージョンによって“新しいコメント(スレッド形式)”は扱いが異なる点も押さえます。
基本:コメントを追加・表示・削除
Sub AddCommentBasic()
'A1セルにコメントを追加
Range("A1").AddComment "これはコメントです"
End Sub
Sub ShowComment()
'コメントを常時表示(ふきだしを出しっぱなし)
If Not Range("A1").Comment Is Nothing Then
Range("A1").Comment.Visible = True
End If
End Sub
Sub DeleteComment()
'コメント削除
If Not Range("A1").Comment Is Nothing Then
Range("A1").Comment.Delete
End If
End Sub
VB- ポイント:
- 追加: Range.AddComment “テキスト”。
- 存在チェック: Range.Comment が Nothing かどうか。
- 表示制御: Comment.Visible を True/False。
- AddCommentは旧来の“メモ”機能に対応し、表示や削除などは Comment オブジェクトで操作します。
複数セルへまとめてコメント(安全テンプレート)
Sub AddCommentsMultiple()
Dim c As Range
For Each c In Range("B2:B6")
If c.Comment Is Nothing Then
c.AddComment Format(Now, "yyyy/mm/dd hh:nn") & " 入力チェック"
End If
Next
End Sub
VB- ポイント:
- 既存コメントがあるセルに対して AddComment を呼ぶとエラーになるため、先に c.Comment Is Nothing を確認してから追加します。
改行入りコメント(複数行のメモ)
Sub AddMultilineComment()
Dim txt As String
txt = "注意点" & vbCrLf & "・値の更新は毎週" & vbCrLf & "・担当:営業1課"
ActiveCell.AddComment txt
End Sub
VB- ポイント:
- vbCrLf(改行コード)や Char(10) を使って複数行にできます。マクロ記録では Char(10) が記録されますが vbCrLf でもOKです。
コメントの編集(テキスト更新・追記)
Sub EditCommentText()
With Range("C3")
If .Comment Is Nothing Then
.AddComment "初回登録"
Else
.Comment.Text .Comment.Text & vbCrLf & "追記:" & Format(Date, "yyyy/mm/dd")
End If
End With
End Sub
VB- ポイント:
- 既存コメントのテキストは Comment.Text で取得・上書きできます。追記時は現在のテキストに連結してから設定します。
表示形式やふきだし形状の制御(基本)
Sub ToggleCommentVisibility()
With Range("D5")
If Not .Comment Is Nothing Then
.Comment.Visible = Not .Comment.Visible
End If
End With
End Sub
VB- ポイント:
- AddCommentは Comment オブジェクトを返し、Visibleで表示/非表示を切替できます。形状(Shape)などの詳細は Comment.Shape を経由して扱えます。
一括削除と既存チェック
Sub ClearCommentsInRange()
'範囲内のコメントをすべて削除
Range("B2:E20").ClearComments
End Sub
Sub AddCommentIfNone()
Dim target As Range: Set target = Range("C3")
If target.Comment Is Nothing Then
target.AddComment "このセルにはメモが追加されました。"
Else
MsgBox "すでにコメントが存在しています。"
End If
End Sub
VB- ポイント:
- ClearCommentsで範囲内の全コメントを削除可能。個別に扱うなら Comment.Delete を使います。
バージョン注意:新しいコメント(スレッド形式)
- 要点:
- 旧来の“コメント(メモ)”は AddComment/Comment で操作。
- Microsoft 365などの“新しいコメント(スレッド)”は VBAでは CommentThreaded として別扱いで、AddCommentは従来型にのみ対応します。提出先のExcelバージョンに合わせて設計してください。
例題で練習
例題1:見出し列に作業メモをまとめて付与
Sub Example_HeaderNotes()
Dim c As Range
For Each c In Range("B2:E2")
If c.Comment Is Nothing Then
c.AddComment "更新担当:" & Environ$("Username")
c.Comment.Visible = True
End If
Next
End Sub
VB例題2:検査結果のセルに自動で注意メモ(閾値判定)
Sub Example_ThresholdNotes()
Dim last As Long, r As Long
last = Cells(Rows.Count, "F").End(xlUp).Row
For r = 3 To last
With Cells(r, "F")
If .Value < 0 And .Comment Is Nothing Then
.AddComment "負値検出:" & Format(Now, "mm/dd hh:nn")
End If
End With
Next
End Sub
VB例題3:コメントを見やすく改行・常時表示に
Sub Example_MultilineVisible()
With Range("H5")
.AddComment "手順" & vbCrLf & "1. 入力" & vbCrLf & "2. 検算" & vbCrLf & "3. 提出"
.Comment.Visible = True
End With
End Sub
VB実務の落とし穴と対策
- 既存コメントへのAddCommentでエラー:
- 対策: 事前に .Comment Is Nothing を確認してから追加する。既存がある場合は .Comment.Text で編集。
- 表示されない・消えて見える:
- 対策: 常時表示は Comment.Visible = True。マウスオーバーのみの表示が既定です。
- 大量処理での速度:
- 対策: ScreenUpdating=False を併用。テキスト生成はまとめて文字列にしてから追加。
- バージョン差(新しいコメント):
- 対策: 従来型メモが目的なら AddComment/Comment を使用。スレッド型は操作が制限されるため仕様確認。
