top of page

​タグ一覧

配列処理(73)

階層化フォーム(33)

ファイル操作(28)

開発事例(22)

シート・セル操作(18)

図形操作(13)

コード自動生成(10)

ユーザーフォーム(9)

文字列操作(8)

設計思想(7)

開発効率化(6)

数学(6)

GAS(5)

アニメーション(5)

技術解説(4)

講座実施報告(5)

イミディエイトウィンドウ(4)

Googleスプレッドシート(4)

副業(4)

クリップボード(4)

条件付き書式(4)

その他(4)

ココナラ(3)

小説(3)

HTML(3)

JavaScript(3)

OneDrive(2)

イベントプロシージャ(2)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Outlook(2)

介護(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

罫線(2)

パズル(2)

小ネタ(2)

コード解説(2)

クラスモジュール(2)

ステータスバー(1)

コード解析(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

溶接ロボット(1)

保育士(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

放課後等デイサービス(1)

児童福祉支援(1)

学校(1)

UI(1)

CAD(1)

カーソル操作(1)

ChangeValueTextBox_byKey|ユーザーフォームのテキストボックスの値を↑↓上下カーソルキーで増減出来るようにする | Excel VBA

ChangeValueTextBox_byKey|ユーザーフォームのテキストボックスの値を↑↓上下カーソルキーで増減出来るようにする | Excel VBA

<概要 テキストボックスを上下カーソルキーで増減

ChangeValueTextBox_byKeyは、ユーザーフォーム上のテキストボックスに対して、

キーボードの↑↓上下カーソルキー操作で数値を直感的に増減させるための汎用プロシージャです。


時刻入力や数値入力を想定したUIにおいて、マウス操作を行わずにキーボードだけで値調整を完結できるため、入力効率と操作性を大きく向上させることができます。


本プロシージャは、KeyDownイベントで受け取ったKeyCodeを元に

増減方向のみを判定し、実際の数値処理はS__StepTextBoxValueへ委譲する設計です。


そのため、キー入力制御と数値処理が明確に分離されており、他のUI部品や数値入力処理へも再利用しやすい構成となっています。


特に「時刻入力」「分入力」「番号入力」など、最小値・最大値が決まっている入力欄との相性が非常に良い汎用処理です。


<実行例 ユーザーフォームでの時刻変更

 この実行サンプルでは、指定したセル範囲をダブルクリックすると時刻変更用のユーザーフォームが起動し、時・分・秒をカーソルキー(↑↓)で直感的に調整できるUIを実装しています。


まずは上の動画をご覧ください。実際にセルをダブルクリックし、ユーザーフォーム上でカーソルキー操作により時刻がスムーズに変更されている様子が確認できます。


「Excelでここまで直感的な入力ができるのか」という感覚を、最初に視覚的に掴んでもらうための実行例です。


実行サンプルの実行例

全体の仕組み概要

この仕組みは、次の2つの役割に分けて構成されています。


  1. ワークシート側 ・指定セルをダブルクリックしたら ・時刻変更用ユーザーフォームを起動する

  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を実現する

という点に重点を置いた構成です。

「時刻入力」「数量入力」「番号調整」など、上下キーによる微調整が求められる場面では、そのまま流用できる実践的な実装例と言えます。


▼実行サンプルのダウンロード


<関連記事>

 今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。

 コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。


<コード>


Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

Softex-Celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page