ピアノと書評日記

ピアノと書評中心に

【VBA】小ネタ集第2回 大量のボタンをなんとかする


f:id:baisoku:20190821231816j:plain


第2回 大量のボタンをなんとかする


職場の誰かが作ったエクセルで、大量のボタンが配置してあるものをたまに見かける。まず作るのが大変だし、デザイン的にもなんとも言えない雰囲気がある。またシートの修正が生じた際にこれをいじるのはなかなか根気が要る。


f:id:baisoku:20190821233625p:plain
大量ボタンエクセルの例 とりあえずお疲れと言いたい



この問題を解決するのに使うのは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セルを入力規制して設定したメソッドを選択するようにしよう。


f:id:baisoku:20190822000832p:plain
選択したメソッド名が動く ここまでスマートになった


リスト表示になるため、ボタンが多いときには有用だ。逆にボタンが少ないときはボタン配置にしたほうが利便性が良いため臨機応変にいきたい。

(なんで職場のエクセルファイルのフォントって創英角ポップが多いんだろ...)