概要
EventShowMoveSpinButtonは、Excel VBAで指定範囲内のセルを選択したときだけ、選択セルの近くへ増加・減少ボタンを表示する汎用プロシージャです。
Excelシート上に大量のスピンボタンを配置するのではなく、2つのShapeを使い回し、選択セルに追従して移動させます。表形式の入力画面で、数値を1ずつ増減させたい場合に使いやすい部品です。
使う場面
- 数量、人数、点数、評価値などを表形式で入力したい
- 各セルにフォームコントロールを大量配置したくない
- 選択中のセルだけに操作ボタンを表示したい
- Excelツールにスマホアプリ風の操作感を持たせたい
- 入力対象範囲外ではボタンを消したい
セルに直接入力させるよりも、クリック操作で増減できるため、誤入力を減らしやすくなります。
デモ
このサンプルでは、対象範囲内のセルを選択すると、セルの下に左右の増減ボタンが表示されます。
プロシージャの階層構造
この部品は、1つの大きな処理ではなく、複数の小さな汎用プロシージャを組み合わせて動かしています。
EventShowMoveSpinButton
├─ GetShapeByName
├─ DrawRectangleRound
├─ Set__FontColor
├─ Move__UpDownButton
├─ DownValue_ByMoveButton
│ ├─ ChangePushedButtonColor
│ │ ├─ GetShapePushed
│ │ │ └─ GetShapeByName
│ │ └─ WaitByDoEvents
│ ├─ GetSelectionCell
│ └─ ChangeValueCell
└─ UpValue_ByMoveButton
├─ ChangePushedButtonColor
│ ├─ GetShapePushed
│ │ └─ GetShapeByName
│ └─ WaitByDoEvents
├─ GetSelectionCell
└─ ChangeValueCell
中心になるのはEventShowMoveSpinButtonです。選択セルの位置を見てボタンを作成・移動・削除し、クリック時の処理はDownValue_ByMoveButtonとUpValue_ByMoveButtonへ渡します。
関連する個別記事:
- 指定名の図形を取得するGetShapeByName
- 角丸四角形を作るDrawRectangleRound
- 増減ボタンのクリック処理DownValue_ByMoveButton / UpValue_ByMoveButton
- クリックされた図形の色を一時変更するChangePushedButtonColor
- クリックされた図形を取得するGetShapePushed
- 選択中セルを安全に取得するGetSelectionCell
- セル値を増減させるChangeValueCell
- DoEventsで短時間待機するWaitByDoEvents
使用例
シートモジュールのWorksheet_SelectionChangeイベントから呼び出します。下の例では、名前付き範囲入力範囲の中を選択したときだけ、増減ボタンを表示します。
コードを読み込み中...CellAreaには、ボタンを表示したいRangeを渡します。対象範囲外を選択すると、表示済みのボタンは削除されます。
サンプルブック
動作確認用のマクロ有効ブックも用意しています。
EventShowMoveSpinButtonサンプルブックをダウンロード
サンプルを開くときは、Excel側でマクロを有効化してください。会社PCなどでマクロ実行が制限されている場合は、ローカルのテスト環境で確認するのが安全です。
コピー可能な実装コード
このコードには、中心処理と関連する子プロシージャをまとめて含めています。まず動きを確認したい場合は、この一式を標準モジュールへ入れて試すのが分かりやすいです。
コードを読み込み中...初心者向けコード解説
EventShowMoveSpinButton(ByRef Target As Range, ByRef CellArea As Range)では、現在選択されたセルTargetと、ボタンを表示したい範囲CellAreaを受け取ります。
最初に、選択セルの位置からボタンのLeft、Top、Width、Heightを計算します。ボタンは選択セルの下側に、減少ボタンと増加ボタンを横並びで表示します。
次に、GetShapeByNameで既存の「減少ボタン」「増加ボタン」があるかを確認します。どちらか片方でも存在しなければ一度作り直し、両方そろっていればMove__UpDownButtonで選択セルの位置へ移動させます。
ボタンにはOnActionでDownValue_ByMoveButtonとUpValue_ByMoveButtonを割り当てています。これにより、図形をクリックしたときにVBAマクロが実行されます。
クリックされた後は、ChangePushedButtonColorで一瞬だけ色を変え、GetSelectionCellで現在の選択セルを取得し、ChangeValueCellで値を増減します。
注意点
Worksheet_SelectionChangeイベントから呼び出す前提です。- 増減対象は現在選択されているセルです。
- 数値以外のセルを対象にすると、
ChangeValueCell側で型エラーになる可能性があります。 - ボタン名として「減少ボタン」「増加ボタン」を使います。同名の図形を別用途で置かないようにしてください。
OnActionで呼び出すため、DownValue_ByMoveButtonとUpValue_ByMoveButtonは同じブック内に必要です。- クリック時の色変更には
DoEventsを使った短時間待機を使っています。
軽いまとめ
EventShowMoveSpinButtonは、Excelシートの入力補助UIを軽量に作るための汎用プロシージャです。
入力セルごとにボタンを配置するのではなく、2つの図形を選択セルへ追従させるため、管理しやすく、見た目もすっきりします。小さな汎用プロシージャを組み合わせて作ることで、ボタン描画、図形取得、色変更、値変更をそれぞれ再利用しやすい形に分けられます。
