コメントの表示・非表示を切り替える[Excel]
コメントの表示・非表示を切り替える
コメントの表示・非表示を切り替えるマクロ
今まであまりコメントをVBAで操るということをしたことがなかったのだが、仕事でマクロ無し縛りで結構ややこしい数式を組み込んだワークシートを作る必要があり、
書いた自分が数式の意味が分からなくなる気満々
だったので、あちこちにかなり細かくコメントを入れた。
当然、配布時にはコメントを非表示にしたり、行・列ごと非表示にするのだが、作成段階では何度も表示⇔非表示を切り替える必要があり、数が多いとかなりうっとうしい。
そこで、あれこれ調べてみた。
まず、1つコメントを入れてみた。
この状態で、イミディエイトに
?Activesheet.Comments.Count
および、
?Activesheet.Comments.Count
と書いてそれぞれ[Enter]してみると、
こうなる。
おなじみのコチラによると、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
使ってみる
この画像でもお分かりのように、セルに付けたコメントは、そのセルを表す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オブジェクトを渡す。
実行結果
分かりにくい画像ですまん。
上のセルのコメントは「表示」、下のセルのコメントが「非表示」になっている。
下のセルにカーソルがあるので、上下両方のコメントが重なって表示されている。
この状態でリスト2を実行する。
ほれ、上のセルのコメントが「非表示」になり、下のセルのコメントが「表示」になった。
おわりに
Commentオブジェクトについてあれこれ嗅ぎ回っていると、コチラで
指定されたコメントに結合される図形を表す Shape オブジェクトを返します。
という記述を見つけた。
正直、全然意味が分からない。
イミディエイトに
?Activecell.Comment.Shape.ShapeStyle
と入力して[Enter]したら何か分かるかと思ったら
こんなエラー出るし。
まだまだ修行が足りんということですな。