次のコードは、列 B で単語 "fee" を検索し、列 B に単語 "fee" が見つかった場合に隣接する 3 つの列にコメントを挿入する変更イベント ハンドラーです。
Private Sub Worksheet_Calculate()
Dim rng As Range, cell As Range
Set rng = Range("B:B")
If Not rng Is Nothing Then
For Each cell In rng.Cells
If cell.Value = "fee" Then
cell.Offset(0, 1).AddComment "fi"
cell.Offset(0, 2).AddComment "fo"
cell.Offset(0, 3).AddComment "fum"
End If
Next
End If
End Sub
上記のコードは正常に動作します。
また、列 B に「料金」という単語が含まれていない場合は、列 B を検索し、隣接する 3 つの列の既存のコメントを削除したいので、Else ステートメントを追加しました。
Private Sub Worksheet_Calculate()
Dim rng As Range, cell As Range
Set rng = Range("B:B")
If Not rng Is Nothing Then
For Each cell In rng.Cells
If cell.Value = "fee" Then
cell.Offset(0, 1).AddComment "fi"
cell.Offset(0, 2).AddComment "fo"
cell.Offset(0, 3).AddComment "fum"
Else:
cell.Offset(0, 1).Comment.Delete
cell.Offset(0, 2).Comment.Delete
cell.Offset(0, 3).Comment.Delete
End If
Next
End If
End Sub
これにより、実行時エラーが発生します:「オブジェクト変数または With ブロック変数が設定されていません」、デバッガーは
cell.Offset(0, 1).Comment.Delete
VBA では With ステートメントを使用するように求められているようですが、試した With 順列でも同じエラーが発生します。何かご意見は?
Andy の正しい提案に従ってください。このコードは、条件が満たされた場合はコメントを追加し、そうでない場合はコメントをクリアします。
Private Sub Worksheet_Calculate()
Dim rng As Range, cell As Range
Set rng = Range("B:B")
If Not rng Is Nothing Then
For Each cell In rng.Cells
cell.Offset(0, 1).ClearComments
cell.Offset(0, 2).ClearComments
cell.Offset(0, 3).ClearComments
If cell.Value = "fee" Then
cell.Offset(0, 1).AddComment "fi"
cell.Offset(0, 2).AddComment "fo"
cell.Offset(0, 3).AddComment "fum"
End If
Next
End If
End Sub