【VBA】小ネタ集第2回 大量のボタンをなんとかする
第2回 大量のボタンをなんとかする
職場の誰かが作ったエクセルで、大量のボタンが配置してあるものをたまに見かける。まず作るのが大変だし、デザイン的にもなんとも言えない雰囲気がある。またシートの修正が生じた際にこれをいじるのはなかなか根気が要る。
この問題を解決するのに使うのはCallByNameという組み込み関数だ。マイナーな関数だが指定した文字のメソッドを呼ぶというなかなかトリッキーな挙動をしてくれる。熟練のプログラマーなら色々な使い方を思いつくのではないだろうか。
【コード】
'シートオブジェクト 'name ホーム Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim selectRange As Range Set selectRange = ThisWorkbook.Sheets("ホーム").[C3] If Target.Address = selectRange.Address Then Dim s As New selectCls CallByName s, Target.Value, VbMethod End If End Sub
'クラスモジュール 'name: selectCls Option Explicit Sub 入力シートへ() ThisWorkbook.Sheets("入力").Activate End Sub Sub 印刷() ThisWorkbook.PrintOut End Sub
このプログラムをセットしておくと、「ホーム」シートの「C3」セルに文字を入れると、入れた文字名のメソッドが動く。このとき入れる文字名はselectClsクラスで設定したメソッドでなければならない。なのでC3セルを入力規制して設定したメソッドを選択するようにしよう。
リスト表示になるため、ボタンが多いときには有用だ。逆にボタンが少ないときはボタン配置にしたほうが利便性が良いため臨機応変にいきたい。
(なんで職場のエクセルファイルのフォントって創英角ポップが多いんだろ...)