コメントの表示・非表示を切り替える[Excel]

コメントの表示・非表示を切り替える

コメントの表示・非表示を切り替えるマクロ

今まであまりコメントをVBAで操るということをしたことがなかったのだが、仕事でマクロ無し縛りで結構ややこしい数式を組み込んだワークシートを作る必要があり、

書いた自分が数式の意味が分からなくなる気満々

だったので、あちこちにかなり細かくコメントを入れた。

当然、配布時にはコメントを非表示にしたり、行・列ごと非表示にするのだが、作成段階では何度も表示⇔非表示を切り替える必要があり、数が多いとかなりうっとうしい。

そこで、あれこれ調べてみた。

 

まず、1つコメントを入れてみた。

f:id:akashi_keirin:20180320181340j:plain

この状態で、イミディエイトに

?Activesheet.Comments.Count

および、

?Activesheet.Comments.Count

と書いてそれぞれ[Enter]してみると、

f:id:akashi_keirin:20180320181350j:plain

こうなる。

おなじみのコチラによると、Commentオブジェクトのプロパティは

プロパティ
名前
Application
Author
Creator
Parent
Shape
Visible

ご覧の通り。

「Visible」プロパティで表示・非表示を切り替えられるっぽい。

念のためコチラで確認しておくと、

オブジェクトを表示するかどうかを表すブール型 ( Boolean ) の値を設定します。値の取得および設定が可能です。

ということなので、このプロパティのTrue / Falseを切り替えれば良いということだ。

コーディング

リスト1 標準モジュール
Public Sub toggleCommentVisible(ByVal targetComment As Comment)    '……(1)'
  With targetComment    '……(2)'
    .Visible = Not .Visible
  End With
End Sub

実にカンタン。たったのこれだけ。

(1)の

Public Sub toggleCommentVisible(ByVal targetComment As Comment)

では、引数を設定。Comment型のオブジェクトを受け取る。

あとは(2)からの3行

With targetComment
  .Visible = Not .Visible
End With

では、Visibleプロパティの値をNot演算子を用いて反転させる。

Boolean型の値をNot演算子で反転させるというのは、地味ながら重要なテクニックだと思う。

初心者のころなら、たとえば、

Dim isHoge As Boolean
If isHoge = True Then
  isHoge = False
Else
  isHoge = True
End If

とかしていたと思うw

使ってみる

f:id:akashi_keirin:20180320181358j:plain

この画像でもお分かりのように、セルに付けたコメントは、そのセルを表すRangeオブジェクトからCommentプロパティで参照・取得が可能らしい。

それを活かして、次のように実行用コードを書いてみた。

スト2 標準モジュール
Public Sub testToggleCommentVisible()
  Dim targetCell As Range
  For Each targetCell In Selection    '……(1)'
    If Not targetCell.Comment Is Nothing Then _
      Call toggleCommentVisible(targetCell.Comment)    '……(2)'
  Next
End Sub

(1)からの4行(実質4行)

For Each targetCell In Selection
  If Not targetCell.Comment Is Nothing Then _
    Call toggleCommentVisible(targetCell.Comment)    '……(2)'
Next

でお分かりのように、For Eachで選択範囲のセルに対して(2)の処理を行う。

(2)の

If Not targetCell.Comment Is Nothing Then _
  Call toggleCommentVisible(targetCell.Comment)

では、セルにコメントがある場合にThen以下の

Call toggleCommentVisible(targetCell.Comment)

で、リスト1のtoggleCommentVisibleプロシージャに、そのセルのCommentオブジェクトを渡す。

実行結果

f:id:akashi_keirin:20180320181408j:plain

分かりにくい画像ですまん。

上のセルのコメントは「表示」、下のセルのコメントが「非表示」になっている。

下のセルにカーソルがあるので、上下両方のコメントが重なって表示されている。

この状態でリスト2を実行する。

f:id:akashi_keirin:20180320181417j:plain

ほれ、上のセルのコメントが「非表示」になり、下のセルのコメントが「表示」になった。

おわりに

Commentオブジェクトについてあれこれ嗅ぎ回っていると、コチラ

指定されたコメントに結合される図形を表す Shape オブジェクトを返します。

という記述を見つけた。

正直、全然意味が分からない。

イミディエイトに

?Activecell.Comment.Shape.ShapeStyle

と入力して[Enter]したら何か分かるかと思ったら

f:id:akashi_keirin:20180320181426j:plain

こんなエラー出るし。

まだまだ修行が足りんということですな。

@akashi_keirin on Twitter