Softex CelwareTech Blog
Excel VBA2026-05-27

選択セルに追従する増減ボタンを表示するExcel VBA汎用プロシージャ

Worksheet_SelectionChangeから呼び出し、選択セルの近くに増減ボタンを表示して値を上下できるExcel VBA汎用プロシージャを解説します。

Excel VBA汎用プロシージャSelectionChangeShape入力補助

概要

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_ByMoveButtonUpValue_ByMoveButtonへ渡します。

関連する個別記事:

使用例

シートモジュールのWorksheet_SelectionChangeイベントから呼び出します。下の例では、名前付き範囲入力範囲の中を選択したときだけ、増減ボタンを表示します。

使用例
vba
コードを読み込み中...

CellAreaには、ボタンを表示したいRangeを渡します。対象範囲外を選択すると、表示済みのボタンは削除されます。

サンプルブック

動作確認用のマクロ有効ブックも用意しています。

EventShowMoveSpinButtonサンプルブックをダウンロード

サンプルを開くときは、Excel側でマクロを有効化してください。会社PCなどでマクロ実行が制限されている場合は、ローカルのテスト環境で確認するのが安全です。

コピー可能な実装コード

このコードには、中心処理と関連する子プロシージャをまとめて含めています。まず動きを確認したい場合は、この一式を標準モジュールへ入れて試すのが分かりやすいです。

EventShowMoveSpinButton.bas
vba
コードを読み込み中...

初心者向けコード解説

EventShowMoveSpinButton(ByRef Target As Range, ByRef CellArea As Range)では、現在選択されたセルTargetと、ボタンを表示したい範囲CellAreaを受け取ります。

最初に、選択セルの位置からボタンのLeftTopWidthHeightを計算します。ボタンは選択セルの下側に、減少ボタンと増加ボタンを横並びで表示します。

次に、GetShapeByNameで既存の「減少ボタン」「増加ボタン」があるかを確認します。どちらか片方でも存在しなければ一度作り直し、両方そろっていればMove__UpDownButtonで選択セルの位置へ移動させます。

ボタンにはOnActionDownValue_ByMoveButtonUpValue_ByMoveButtonを割り当てています。これにより、図形をクリックしたときにVBAマクロが実行されます。

クリックされた後は、ChangePushedButtonColorで一瞬だけ色を変え、GetSelectionCellで現在の選択セルを取得し、ChangeValueCellで値を増減します。

注意点

  • Worksheet_SelectionChangeイベントから呼び出す前提です。
  • 増減対象は現在選択されているセルです。
  • 数値以外のセルを対象にすると、ChangeValueCell側で型エラーになる可能性があります。
  • ボタン名として「減少ボタン」「増加ボタン」を使います。同名の図形を別用途で置かないようにしてください。
  • OnActionで呼び出すため、DownValue_ByMoveButtonUpValue_ByMoveButtonは同じブック内に必要です。
  • クリック時の色変更にはDoEventsを使った短時間待機を使っています。

軽いまとめ

EventShowMoveSpinButtonは、Excelシートの入力補助UIを軽量に作るための汎用プロシージャです。

入力セルごとにボタンを配置するのではなく、2つの図形を選択セルへ追従させるため、管理しやすく、見た目もすっきりします。小さな汎用プロシージャを組み合わせて作ることで、ボタン描画、図形取得、色変更、値変更をそれぞれ再利用しやすい形に分けられます。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →