少し前に、こちらの記事を拝読した。
www.excellovers.com
これは面白い!ということで、私も真似してみた。
(Kouさん、ありがとうございます)。
まず、ユーザーフォームを一つ準備する。大きさは、適当だ。
取り敢えず、42個のコマンドボタンを配置してみる。場所は、RND関数を用いて適当に散らかしてみた。
ユーザーフォーム
Private Sub UserForm_Initialize() Dim i As Long Dim myCmdBtn As MSForms.CommandButton For i = 1 To 42 Set myCmdBtn = Me.Controls.Add("Forms.CommandButton.1", _ "CommandButton" & i, True) With myCmdBtn .Left = Me.Width * Rnd * 0.9 .Top = Me.Height * Rnd * 0.9 .Width = 20 .Height = 20 .Caption = i End With Next End Sub
次に、これを綺麗に並べてみた。そのままだと一瞬で終わってしまうので、動かすたびに0.1秒の待機時間を挟んでみた。
Private Sub UserForm_Click() Dim i As Long Dim myControl As Control Dim j As Long Dim dx As Double Dim dy As Double For Each myControl In Me.Controls With myControl dx = (.Left - (10 + 20 * (i Mod 7))) / 3 dy = (.Top - (10 + 20 * WorksheetFunction.RoundDown(i / 7, 0))) / 3 For j = 1 To 3 .Left = .Left - dx .Top = .Top - dy Application.Wait [now()+"0:00:00.1"] Next i = i + 1 End With Next End Sub
実際は、ボタンたちがノロノロと動いて整列するのだが、なぜかその様子が上手く録画できなかった。
これは、なかなか面白い。
折角作ったツールも、使われなければ意味が無い。使ってもらうには、
「とにかく起動したくなる」
ような視覚効果や音響効果などがあると、良いかもしれない。職場で音は出せないので、最初に少しお遊びがあれば?と思って手を付けた次第。
もう少し、研究してみます。
参考まで。