VBAでは新しいコメント機能がどうなってるか調べました

WordやExcelでは最近、コメント機能が一新されました。
今までのコメント機能は次のようなものでした。

新しくなったコメントは次のようなものです。

今までは1個しかコメントできなかったのですが、経緯を示すように1つのセルや一か所に複数のコメントを残すことができるようになりました。
従来のコメント機能はなくなったわけではなく、名称がメモに変更になりました。
今回は、私の記事としてはかなり珍しいのですが、この新しいコメント機能をVBAで操作するためのCommentThreadedメソッド、およびプロパティを解説します。
あまり検索しても出てこないんですよね。
便利な使い方もできるので、それも紹介します。この辺がいつもらしい。

CommentThreaded

従来のコメントは、VBAではCommentで操作していました。
例えば、セルC4のコメントに何が入力されているかを変数comに取り出すには、次のような記述でした。

com = Range(“C4”).Comment.Text

新しいコメント機能では、スレッド型になっているということで、CommentThreadedを使います。

com = Range(“C4”). CommentThreaded.Text

新しいコメント機能はたくさんのコメントを設定できますが、その中の初めの1個、スレッドタイトルが取り出されます。


もし、何個目かのコメントを取り出すには次のような記述で取り出します。

com = Range(“C4”).CommentThreaded.Replies(1).Text

スレッド構造なので、1個目のコメントがスレッドタイトルとして考えられていて、その中の子コメントの1個目が取り出されます。

スレッドがスレッドタイトルと子コメントが2つあれば3つのコメント数になります。

それを求めるには次のように、子コメントであるReplies個数にスレッドタイトルの1個を足します。

comcnt = Range(“C4”).CommentThreaded.Replies.Count + 1

ということは、全スレッドを文字で書き出すのであれば、次のようなループになります。

Dim i As IntegerDim comTextAll As String
comTextAll = Range(“C4”).CommentThreaded.Text
For i = 1 To Range(“C4”).CommentThreaded.Replies.Count
comTextAll = comTextAll & vbCrLf &
Range(“C4”).CommentThreaded.Replies(i).Text
Next

.CommentThreaded.Repliesで参照できるプロパティはたくさんあるのですが、その中で重要なのは実際のスレッドにも表示される投稿者、内容、投稿日時の3つと上のループで紹介した子スレッド数を表すCountの4つですね。
投稿者はAuthorでさらにその名前をNameプロパティで呼び出すことでスレッドに表示される投稿者名になります。

Range(“C4”).CommentThreaded.Replies(i). Range(“C4”).Author.Name

内容はTextです。
投稿日時はDateです。

これをひとまとめで見れるようにするためには、次のようなコードでできます。

Dim i As IntegerDim comTextAll As String
Cells(1,1).Value = Range(“C4”).CommentThreaded. Author.Name
Cells(1,2).Value = Range(“C4”).CommentThreaded.Text
Cells(1,3).Value = Range(“C4”).CommentThreaded. Date
For i = 1 To Range(“C4”).CommentThreaded.Replies.Count
Cells(i + 1, 1).Value =
Range(“C4”).CommentThreaded.Replies(i).Author.Name
Cells(i + 1, 2).Value =
Range(“C4”).CommentThreaded.Replies(i).Text
Cells(i + 1, 3).Value = Range(“C4”).CommentThreaded.Replies(i).Date
Next

取り出すのは以上の方法ですが、セルC4に新しくコメントを入れるには、次のコードを使います。

Range(“C4”).AddCommentThreaded “abc123”

セルC4に「abc123」の名前でスレッドを立てます。

このコードは現在コメントが設定してあるセルに対して実行するとエラーになります。
1つのセルに対し、コメントスレッドは1つしか立てられません。

スレッドを追加することはできます。

Range(“C4”).CommentThreaded.AddReply “Britain”

こうすると、先ほどのabc123スレッドに対し、Britainというコメントを入れることができました。

スレッド名を変更するには、次のコードです。

Range(“C4”).CommentThreaded.Text “ABC”

単純にテキスト文字を指定すればよいのです。
子コメントに対しても同じ操作です。

CommentThreadedの中のリプライの何番目と指定する必要があります。

Range(“C4”).CommentThreaded.Replies(1).Text “France”

削除も同様で、Deleteメソッドを使うだけです。

スレッドトップを削除するなら次のコードで、実行するとスレッドがなくなってしまいます。

Range(“C4”).CommentThreaded.Delete

子コメントの削除は、リプライの何番目かを指定します。

Range(“C4”).CommentThreaded.Replies(1).Delete

まとめ

今回はあまりWeb上に情報がない、WordやExcelでスレッド式にコメントが入れられるようになった新しいコメントをVBAで操作する方法を解説しました。

このあたらしいコメント機能を使えば、例えば値の変更をするたびに、「○○に変更」とコメントを付けていったセルに対して、最後にどれを選ぶか、簡単に選べるものを作成することもできます。

サトウヨシヒロ

Excelを中心としたMicrosoft Officeの魔法使い。
仙台市在住のフリーランスのパソコンインストラクターです。
1969年1月生まれ。
Excelを黎明期から30年近く使っています。Wordも使えます。
出版社様と一緒にExcelの情報発信もしています。
最近は羊に夢中です。
2019年はRPAと業務効率化を勉強しています。

Twitterでも業務で使える便利なOffice技をめっちゃつぶやくツイッタラーです。@yosatonet

コメントを残す

メールアドレスが公開されることはありません。