ChangeValueTextBox_byKey|ユーザーフォームのテキストボックスの値を↑↓上下カーソルキーで増減出来るようにする | Excel VBA
- yuji fukami
- 1月5日
- 読了時間: 4分

<概要 テキストボックスを上下カーソルキーで増減>
ChangeValueTextBox_byKeyは、ユーザーフォーム上のテキストボックスに対して、
キーボードの↑↓上下カーソルキー操作で数値を直感的に増減させるための汎用プロシージャです。
時刻入力や数値入力を想定したUIにおいて、マウス操作を行わずにキーボードだけで値調整を完結できるため、入力効率と操作性を大きく向上させることができます。
本プロシージャは、KeyDownイベントで受け取ったKeyCodeを元に
増減方向のみを判定し、実際の数値処理はS__StepTextBoxValueへ委譲する設計です。
そのため、キー入力制御と数値処理が明確に分離されており、他のUI部品や数値入力処理へも再利用しやすい構成となっています。
特に「時刻入力」「分入力」「番号入力」など、最小値・最大値が決まっている入力欄との相性が非常に良い汎用処理です。
<実行例 ユーザーフォームでの時刻変更>
この実行サンプルでは、指定したセル範囲をダブルクリックすると時刻変更用のユーザーフォームが起動し、時・分・秒をカーソルキー(↑↓)で直感的に調整できるUIを実装しています。
まずは上の動画をご覧ください。実際にセルをダブルクリックし、ユーザーフォーム上でカーソルキー操作により時刻がスムーズに変更されている様子が確認できます。
「Excelでここまで直感的な入力ができるのか」という感覚を、最初に視覚的に掴んでもらうための実行例です。
全体の仕組み概要
この仕組みは、次の2つの役割に分けて構成されています。
ワークシート側 ・指定セルをダブルクリックしたら ・時刻変更用ユーザーフォームを起動する
ユーザーフォーム側 ・時・分・秒の各テキストボックスで ・↑↓キーによる数値増減を行う
数値の増減処理そのものはChangeValueTextBox_byKey という汎用プロシージャに切り出されており、UIイベント(KeyDown)から呼び出すだけで再利用できる構成になっています。
セルのダブルクリックによるフォーム起動(シートオブジェクト側)
まず、ワークシート側ではWorksheet_BeforeDoubleClick イベントを使用しています。
ここでは、
「時刻」列(B列)
見出しセルの下から 1000行分
を入力対象範囲として定義しています。
この範囲内のセルがダブルクリックされた場合のみ、時刻変更用ユーザーフォーム(frm時刻変更)を起動します。
既存値と新規入力の両対応
ダブルクリックされたセルに、
すでに時刻が入力されている場合 → その値を初期値としてフォームへセット
空白や未入力の場合 → 現在時刻を初期値としてフォームを表示
という分岐を行っています。
これにより、
既存時刻の微調整
新規入力としての時刻設定
のどちらにも対応できる設計になっています。
最後に Cancel = True を設定することで、Excel本来のセル編集モードへの遷移を防ぎ、「ダブルクリック=フォーム起動」という操作感に統一しています。
▼シートオブジェクトのコード
各テキストボックスでのキー操作による増減処理(ユーザーフォーム側)
時刻変更用ユーザーフォームには、次の3つのテキストボックスが配置されています。
時(0 ~ 23)
分(0 ~ 59)
秒(0 ~ 59)
それぞれの KeyDown イベント内でChangeValueTextBox_byKey を呼び出しています。
ここで行っているのは、
どのキーが押されたかの判定
最小値・最大値の指定
だけです。
実際の数値処理(増減・循環・表示形式の制御)は、すべて ChangeValueTextBox_byKey 側に任せています。
▼時刻変更用ユーザーフォームの中のコード
ChangeValueTextBox_byKey を使うメリット
この構成にすることで、次のようなメリットがあります。
↑↓キーによる増減ロジックを完全に共通化できる
時・分・秒で異なる範囲指定も引数だけで対応可能
UIイベントと数値処理が分離され、可読性が高い
他の数値入力フォームにもそのまま流用できる
ユーザーフォームの操作感を改善しつつ、コードは増やさず、保守性も高い構成になっています。
Enterキーで確定し、セルへ反映
ユーザーフォームでは Enter キーを押すことで確定処理を行います。
各テキストボックスの入力値をチェック
TimeSerial で Date 型の時刻を生成
ダブルクリック元のセルへ値をセット
フォームを閉じる
という流れです。
これにより、
セル操作 → フォームで調整 → セルへ反映
という一連の操作が、非常に直感的かつスムーズに完結します。
まとめ
この実行サンプルは、
ChangeValueTextBox_byKey を KeyDownイベント専用の汎用部品として活用し
Excel標準操作を邪魔せず
実務で使える入力UIを実現する
という点に重点を置いた構成です。
「時刻入力」「数量入力」「番号調整」など、上下キーによる微調整が求められる場面では、そのまま流用できる実践的な実装例と言えます。
▼実行サンプルのダウンロード
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。



