EXCEL VBA セルにコメントを追加する・コメントの削除・編集 (AddCommentメソッド)
EXCEL VBA セルにコメントを追加する・コメントの削除・編集 (AddCommentメソッド)
今回説明するのは、AddCommentメゾットの利用方法を説明いたします。セルに注意書きや詳細情報を記載する時に、コメントを追加します。VBAのAddCommentメゾットでコメントを追加する事により、ある条件でコメントを追加したり、データを追加した際にコメントを残すなどを自動的に行う事ができます。それでは、サンプルプログラムを交えて順番に説明いたします。
●【Range.AddComment メソッドについては、下記を参照して下さい】:参考(Microsoft社 様)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.addcomment
● AddCommentメゾットを利用するには、下記の通りに設定を行います。
オブジェクト.AddComment(Text)
Text・・・コメントを残す文字列を指定します。
【使用例①】:セルA1にコメントを追加します・
Range(“A1”).AddComment “セルA1です。”
【使用例②】:セルA1に日付と文字列(更新日)をコメントで追加します。
【 vbCrLf 】で改行
Range(“A1”).AddComment Date & vbCrLf & “更新日”
【注意点】
既にAddCommentメゾットでコメントを追加しているセルに対して、更にAddCommentメゾットでコメントを追加するとエラーが発生します。【 On Error Resume Next 】 でエラー回避するなど、エラー処理コードを記述する必要があります。又は、コメントを追加する前に、消してからコメントを追加する方法でも大丈夫です。
① On Error Resume Next ’・・・エラーを回避
② Range(“A1:D10”).ClearComments ‘コメントを削除(範囲指定)
③ cells.ClearComments ‘コメントを削除(シート全てのコメントを削除)
EXCEL VBA データの記入漏れに、コメントを追加する・登録漏れを指摘(AddCommentメソッド)
下記のサンプルプログラムは、データに登録漏れが有る場合に、空白(何も入力されていない)の場合、コメントを自動的に追加して入力漏れを指摘するサンプルプログラムです。
【プログラムの流れ】
① 入力漏れをチェックするセルを範囲指定します(セル:A1~F8)
② エラー発生を無視する。(AddCommentメゾットは、コメントを追加したセルに、更に追加するとエラーが発生するので)
③ 指定したセル範囲(A1:F8)を順番に繰り返します。
④ 未入力のセルを判定します。
⑤ 未入力のセルが発見された場合は、該当セルに未入力の内容をコメントします。
(セルD4:で発生したので、D列は【生年月日】なので、コメントには、【生年月日が未入力です】と表示されます。)
⑥ 指定したセル全てをチェックするまで繰り返します。④へ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
' ' Sub AddComment10() 'データの記入漏れに、コメントを追加する・登録漏れを指摘(AddCommentメソッド) Dim Cellchk, CellsData As Range Set CellsData = Range("A1:F8") '指定したセル範囲を指定します。 On Error Resume Next 'エラーを無視 For Each Cellchk In CellsData '指定したセル範囲を順番に調べます。 If IsEmpty(Cellchk.Value) Then '未入力のセルか判定します。 Cellchk.AddComment Cells(1, Cellchk.Column) & "が未入力です。" '未入力のセルに未入力内容がコメントされます。 End If Next Cellchk End Sub ' |
(画面クリックして拡大)
EXCEL VBA 指定した条件に該当するセルに、コメントを追加する(AddCommentメソッド)
下記のサンプルプログラムは、指定した条件に該当するセルに、コメントを追加するサンプルプログラムです。下表の集計表にデータが記入されているが、マイナスデータが登録されているセルに指摘事項としてコメントを追加します。追加するコメント内容は、【〇月-〇〇支店名 マイナス計上です。】
【プログラムの流れ】
① A1セルを元に表のセル範囲を把握します。
② 表の選択範囲を元に既に、コメントが有れば削除します。
③ 表の選択範囲を元に、セルを順番に調べます。
④ セルに0未満のデータが登録されているか確認します。
⑤ セルに0未満(マイナス計上のセル)のデータが登録されている場合は、コメントを追加します。
⑥ 表の選択範囲のセル全てを繰り返します。③へ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
' ' Sub AddComment20() '指定した条件に該当するセルにコメントを追加する(AddCommentメソッド) Dim Cellchk, CellsData As Range Set CellsData = Range("A1").CurrentRegion '指定したセル範囲を指定します。 CellsData.ClearComments '選択範囲のコメントを削除 For Each Cellchk In CellsData '表の選択範囲を元にセルを順番に調べます。 If Cellchk < 0 Then 'セルにO未満のデータ登録されているか判定します。 Cellchk.AddComment Cells(1, Cellchk.Column) & "-" & _ Cells(Cellchk.Row, 1) & vbCrLf & "マイナス計上です。" 'マイナス計上のセルにコメントされます。 End If Next Cellchk '指定したセル範囲を全て繰り返します。 End Sub ' |
(画面クリックして拡大)
EXCEL VBA データを変更したセルにコメントを追加する。変更履歴の追加【変更日時・ユーザー名記入】(AddCommentメソッド)
下記のサンプルプログラムは、セルに入力したデータを変更した場合に、そのセルにコメントを追加するサンプルプログラムです。コメントを追加した際に、誰が変更したか分かるように、コメントに変更日時とユーザー名が追加されます。(履歴管理)
【プログラムの流れ】
① 表の範囲を把握します。
② セルの変更が無いか判定します。
③ 判定結果で変更がない・・・・なにもしない。
④ 判定結果で変更した場合・・・変更した位置を把握します。⇒ 前のコメント削除します。 ⇒ 改めてコメントを追加します。
【プログラム実行条件】
※ 下記のプログラムは、ワークシートに対するイベントプロシージャにプログラムを記述します。
【ワークシート1(Sheet1)に記述します。】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
' ' Private Sub Worksheet_Change(ByVal Target As Range) Dim Cellchk, CellsData As Range Set CellsData = Range("A1").CurrentRegion '表の範囲を把握します。 If Intersect(Target, CellsData) Is Nothing Then 'セルの変更が無いか判定します。 Exit Sub 'セルの変更がなければ、何もしない。 Else 'セルの変更が有った場合 With Cells(Target.Row, Target.Column) '変更したセルを位置を把握します。 .ClearComments 'コメントを削除します。 .AddComment Date & "-" & Time & "変更日時" & _ vbCrLf & "ユーザー名:" & Application.UserName ' End With End If End Sub ' |
(画面クリックして拡大)
EXCEL VBA 入力データを変更したセルにコメントを追加する。コメントも追記する【変更日時・ユーザー名記入】(AddCommentメソッド)・(コメントが追加されているか判定)
下記のサンプルプログラムは、サンプルプログラム③の応用になります。サンプルプログラムでは、入力データが変更したセルにコメントを追加するサンプルプログラムですが、コメントに変更履歴が残るようにプログラムの一部を変更いたしました。履歴が残る事で誰がいつ変更したか、コメントを参照する事で履歴管理する事が出来ます。
【プログラムの流れ】
① 表の範囲を把握します。
② セルの変更が無いか判定します。
③ 判定結果で変更がない・・・・なにもしない。
④ 判定結果で変更した場合・・・変更した位置を把握します。
⑤ 変更したセルに、コメントが追加されているか?
「コメントが追加されいない場合」・・・新規追加:更新日時とユーザー名を追加します。
⇒コメントサイズの自動調整
「既にコメントが入力されている場合」・・既に登録されているコメントを一時保存します。
⇒既存のコメントを削除します。
⇒一時保存したコメント(履歴)と今回登録するコメント:更新日時とユーザー名を一緒にコメント追加します。
⇒コメントサイズの自動調整
【プログラム実行条件】
※ 下記のプログラムは、ワークシートに対するイベントプロシージャにプログラムを記述します。
【ワークシート1(Sheet1)に記述します。】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
' ' Private Sub Worksheet_Change(ByVal Target As Range) Dim Cellchk, CellsData As Range Dim Tmptext As String Set CellsData = Range("A1").CurrentRegion '表の範囲を把握します。 If Intersect(Target, CellsData) Is Nothing Then 'セルの変更が無いか判定します。 Exit Sub 'セルの変更がなければ、何もしない。 Else 'セルの変更が有った場合 With Cells(Target.Row, Target.Column) '変更したセルを位置を把握します。 If TypeName(.Comment) = "Nothing" Then '変更したセルにコメントが追加されているか判定します。 'コメントがない場合(新規追加) .AddComment Date & "-" & Time & "変更日時" & _ vbCrLf & "ユーザー名:" & Application.UserName .Comment.Shape.TextFrame.AutoSize = True 'コメントサイズを自動調整 Else '既にコメントが追加されている場合 Tmptext = .Comment.Text '登録されているコメントを変数へ保管 .ClearComments 'コメントを削除します。 .AddComment Tmptext & vbCrLf & _ Date & "-" & Time & "変更日時" & _ vbCrLf & "ユーザー名:" & Application.UserName .Comment.Shape.TextFrame.AutoSize = True 'コメントサイズを自動調整 '登録されているコメントと追加するコメントを併せてコメントを追記します。 End If End With End If End Sub ' |
(画面クリックして拡大)
EXCEL VBA コメント内容を取得して別シードへ一覧表示させる。(AddCommentメソッド)
下記のサンプルプログラムは、ワークシート上のコメントを別シートへコメントを一覧表示させるサンプルプログラムです。ワークシート「コメント」には、コメントが部分的に追加されています。このコメントを別シート「一覧」のA列には、コメントの「セル番号」・B列には内容を転記します。
【プログラムの流れ】
① ワークシート「コメント」の表範囲を把握します。(セル「A1」を基準に範囲取得します)
② 転記先の開始行を指定します。(2行目から)
③ 指定したセル範囲を順番に調べます。
④ セルにコメントがあるか調べます。
「コメントが有る場合」・・・別シート「一覧」のA列にセル番号・B列にコメントを転記します。
「コメントが無い場合」・・・何もしない。
【プログラム実行条件】
・ワークシート「コメント」を作成して、表とコメントを追加します。
・ワークシート「一覧」を作成してします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
' ' Sub AddComment50() 'コメント取得して、別シートに一覧表示する。 Dim ws01, ws02 As Worksheet Dim Cellchk, CellsData As Range Dim L As Integer Set ws01 = Worksheets("コメント") Set ws02 = Worksheets("一覧") Set CellsData = ws01.Range("A1").CurrentRegion '表の範囲を把握します。 L = 2 '転記先の開始行を指定します(2行目) For Each Cellchk In CellsData '指定したセル範囲を順番に調べます。 If Not Cellchk.Comment Is Nothing Then 'セルにコメントが有るか調べます。 ws02.Cells(L, "A") = Cellchk.Address 'シート「一覧」のA列へセル番号を転記します。 ws02.Cells(L, "B") = Cellchk.Comment.Text 'シート「一覧」のA列へセル番号を転記します。 L = L + 1 '転記先の行を加算します+1 End If Next Cellchk End Sub ' |
(画面クリックして拡大)
EXCEL VBA コメントに画像・写真を挿入する。(AddCommentメソッド)
下記のサンプルプログラムは、セルのコメントに画像を挿入するサンプルプログラムです。コメント(文字列)では、表現できない場合などに画像を挿入して、表示させる事でユーザーに伝える事ができます。
● 例)コメントに画像を挿入します。下記のサンプルプログラムは
1 2 3 4 5 6 7 8 |
Sub AddComment60() 'セルコメントに画像を挿入します。 With ActiveCell.AddComment ' .Shape.Fill.UserPicture "C:\PIC\花1.png" .Visible = True End With End Sub |
【下記のプログラムの流れ】
① コメントを挿入するセルを(C3)にセットする。
② コメントをクリアー(削除)します。
③ セル(C3)に「あじさい」の文字列を挿入します。
④ コメントを追加する。
⑤ 指定した画像をコメントに挿入します。(C:\PIC\花1.png)より画像データを読み込みます。
⑥ コメントを表示します。
【プログラム実行条件】
・Cドライブ直下にフォルダーを作成して画像ファイルを用意します。
【 C:\PIC\花1.png 】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
' ' Sub AddComment61() 'セルコメントに画像を挿入します。 Dim SetCell As Range Set SetCell = Range("C3") 'セル「C3」にセット SetCell.ClearComments 'コメントをクリアーします。 SetCell = "あじさい" 'セル「C3」に文字列挿入します。 With SetCell.AddComment 'コメントを追加 .Shape.Fill.UserPicture "C:\PIC\花1.png" '花の画像を挿入 .Visible = True 'コメントを表示 End With End Sub ' |
(画面クリックして拡大)
EXCEL VBA コメントの削除・部分削除・一括削除(AddCommentメソッド)
下記のサンプルプログラムは、コメントの削除を行う2種類のサンプルプログラムです。1つ目は、選択範囲内のコメントを削除するサンプルプログラムで、2つ目は、シート全体を削除するサンプルプログラムです。
【下記のサンプルプログラムは、3パターンのコメントの削除方法です】
① 指定したセル範囲のコメントを削除
② 指定した表範囲内のコメントを削除
③ シート内の全てのコメントを削除
詳細内容(プログラム)についは、下記プログラムを参照して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
' ' Sub AddComment70() 'コメント削除(指定したセル範囲)① Range("A1:D10").ClearComments 'コメントを削除(範囲指定) End Sub '' ' ' Sub AddComment71() 'コメント削除(表範囲内を削除)② Dim Cellchk, CellsData As Range Set CellsData = Range("A1").CurrentRegion '指定したセル範囲を指定します。 CellsData.ClearComments '選択範囲のコメントを削除 End Sub ' ' Sub AddComment72() 'コメントを削除(シート全てのコメントを削除)③ Cells.ClearComments End Sub ' |
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。