category name  »  page title date

文字を隠す

画面上の文字を表示しないように隠蔽したいことがあります。
計算途中の値を仮置きしたセルであったり、プログラム開発中のメモ書きであったり、そのプログラムを使用中には目にしたくない、見えるとうるさい、といった場合です。
場合によると、秘密の文字列を人知れず潜らせておきたい、などということもあるかも。

そういうときは、セルの中の文字であれば文字色をそのセルの塗りつぶし色にしてしまう、TextBox の中の文字であれば、TextBox ごと Visible を False にしてしまう、というのが簡単ではないでしょうか?

それをいちいち手でやるというのも面倒なので、そのためのマクロを組んでみました。

画面上の隠蔽したい範囲を、ここでは $C$3:$C$5 のセル、TEXT1 という名前をつけた TextBox としています。

特段むつかしいことをやっているわけではないので、コードの中身についての説明は端折りますが、HideText で対象の文字を全部隠蔽し、ShowText で再現させます。
ついでに、それを切り替えるマクロも、ChangeTextVisibility として作ってみました。

標準モジュール

Private Const hideRange = "$C$3:$C$5"
Private Const hideShapeName = "TEXT1"
'
'----- 文字を消す
Public Sub HideText()
Dim c
      For Each c In ActiveSheet.Range(hideRange)
            c.Font.Color = c.Interior.Color
      Next
      ActiveSheet.Shapes(hideShapeName).Visible = False
End Sub
'----- 文字を表示する
Public Sub ShowText()
      ActiveSheet.Range(hideRange).Font.Color = vbBlack
      ActiveSheet.Shapes(hideShapeName).Visible = True
End Sub
'----- 文字の表示/隠蔽を切り替える
Public Sub ChangeTextVisibility()
Dim c
      For Each c In ActiveSheet.Range(hideRange)
            c.Font.Color = -CInt(Not c.Font.Color = c.Interior.Color) * c.Interior.Color
      Next
      With ActiveSheet.Shapes(hideShapeName)
            .Visible = Not .Visible
      End With
End Sub

ここでは、表示した場合のセル内の文字色を黒 (vbBlack=0) としていますが、セルの塗りつぶし色によっては、白にしたい場合もあるでしょうから、その場合にはShowText と ChangeTextVisibility の中の .Font.Color の設定式をちょいと工夫する必要があります。

隠蔽すべきセルのアドレスや TextBox のシェイプ名を配列にしておいて、一括して切り替えられるようにしておくと、便利なツールになるかもしれません。