動きを付けて、気付いてもらう(セル内でスクロール)

何か注意書きをしても、気付く人は気づくし、気付かない人は気づかない。当たり前の話だ。しかも悪いことに、

  • 注意書きに気づく人は、書かれているようなことを日頃から注意している。
  • 注意書きに気づきにくい人は、どれだけ工夫を凝らしても、やっぱり気づいてくれない。

ことが多いような気がする(結果、期待した効果が得られない)。
※重大な事故や安全にかかわる場合を除く、軽微な事案についての話です。

そこで、どうしても着目して欲しい箇所には

  • 色を付ける
  • 強調文字にする
  • 斜体にする

など様々な工夫が有るようだが、今回は動かしてみることに挑戦した。
f:id:Infoment:20190213224944p:plain
といっても、難しいことは出来ない。そこで今回は、あたかも文字がセル内でスクロールしているかのような視覚効果を付してみた。

作戦は、こうだ。

  1. 「助走」用に、スクロールしたい文字に半角スペースを追加する。
  2. 順繰りに、先頭の文字を一番後ろに持っていく。
  3. 処理が一気に終わらないように、都度コードを中断する。

コードの中断には、Win APIのSleep関数を用いてみた。
まず標準モジュールの先頭に、以下を記載しておく。

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Windows 7 以前の型は、「PtrSafe」を書かないでください。

次いで、文字を動かす部分を作る。今回は、動かしたい文字が記載されたセルを引数として受け取っている。

Sub CharacterScroll(target_range As Range)
    Dim str As String
        str = target_range.Value
        
        ' スクロール用の半角スペースを、文字数の3倍追加する。
        str = str & WorksheetFunction.Rept(" ", Len(str) * 3)
    Dim i As Long
    Dim j As Long
        ' 3周させる。
        For i = 1 To Len(str) * 3
            ' 先頭の文字を一番後ろに移動させる。
            str = Mid(str, 2) & Left(str, 1)
            target_range = str
            ' 一時停止。30コマ/秒(のつもりで)。
            Sleep 1000 / 30
        Next
        ' 最初に付けた半角スペースを削除。
        target_range = Trim(str)
End Sub

↓ 動かした結果 ↓ 。
f:id:Infoment:20190213230419g:plain

「こんなもの動かしている暇が有ったら、その間に処理させろ」と怒られそうなので、使い処には充分注意しましょう。

参考まで。