ユーザーフォーム入門
テンキーのスクリーンキーボード作成

Excelマクロのユーザーフォームの基礎、エクセルVBAの入門解説
公開日:2024-02-26 最終更新日:2024-02-26

第28回.テンキーのスクリーンキーボード作成


テンキー スクリーンキーボード VBA マクロ ユーザーフォーム

テンキーのスクリーンキーボードを作製しました。
普通はあまり必要性ないと思いますが・・・
個人的に、あるExcelファイルを使うときに、テンキーがあったらよいなーと思ったので作ってみました。


ということで、特定ファイルのみで使う目的で作製したものなので、汎用性のある便利なものということではあのません。
ユーザーフォーム作製の参考にしてもらえればと思います。
ユーザーフォームのイベント処理の参考にはなると思います。


ユーザーフォームの作成

テンキー スクリーンキーボード VBA マクロ ユーザーフォーム

コントロール コントロール名 役割
ユーザーフォーム frm10key
数値表示 lblNum 入力数値の表示
「C」ボタン btnC クリア
「1」~「9」ボタン btn1~btn9 数値の1~9
「0」ボタン btn0 数値の0
「00」ボタン btn00 数値の00
「↓」ボタン btnE Enter


イベントプロシージャー共通化のクラス

複数のボタンでのイベント処理をボタンの数だけ作るのが面倒なのでイベントを共通化しました。
共通化に必要な技術的な解説は以下を参考にしてください。
第23回.イベントプロシージャーの共通化
・サンプルのユーザーフォーム ・イベントプロシージャーの共通化のVBA ・イベントプロシージャーの共通化の問題点 ・イベントプロシージャーの共通化の雛形VBA ・イベントプロシージャーの共通化の最後に
第24回.イベントプロシージャーの共通化(Enter,Exit)
・イベントプロシージャーの共通化の問題点 ・問題解決した経緯 ・API:ConnectToConnectionPointについて ・ConnectToConnectionPointの使用例 ・イベントと対応するVB_UserMemIdの一覧とインポート用雛形 ・イベントプロシージャーの共通化の最後に

Option Explicit

'イベントを発生させるクラス(オブジェクト)
Private WithEvents pButton As MSForms.CommandButton

'コントロールの親であるフォーム
Private pForm As MSForms.UserForm

'数値を入れるテキストボックス
Private pLabel As MSForms.Label

'対応するコントロールを設定するプロパティ
Public Property Set Button(ByVal aButton As MSForms.CommandButton)
  Set pButton = aButton
  pButton.Tag = pButton.BackColor
  Set pForm = aButton.Parent
  Set pLabel = pForm.Controls("lblNum")
End Property

'WithEventsのClickイベントプロシージャー
Private Sub pButton_Click()
  Select Case pButton.Caption
    Case "C"
      pLabel.Caption = ""
    Case "↓"
      ActiveCell = pLabel.Caption
      Unload pForm
    Case Else
      pLabel.Caption = pLabel.Caption & pButton.Caption
  End Select
End Sub

'WithEventsのMouseMoveイベントプロシージャー
Private Sub pButton_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  If pButton.BackColor = vbYellow Then Exit Sub
  Dim ctl As Control
  For Each ctl In pForm.Controls
    If IsNumeric(ctl.Tag) Then ctl.BackColor = ctl.Tag
  Next
  pButton.BackColor = vbYellow
End Sub

'WithEventsのKeyDownイベントプロシージャー
Private Sub pButton_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = vbKeyEscape Or KeyCode = vbKeyF1 Then
    Unload pForm
  End If
End Sub

MouseMoveイベントでは、マウスオーバーでボタンを黄色に変更しています。
この黄色はハードコーディングしているので、適宜対応が必要になります。
元々の色を、コントロールを設定するSet ButtonでTagプロパティに入れておくことで対応しているので、元の色が何色でも対応可能としています。
テンキー スクリーンキーボード VBA マクロ ユーザーフォーム

「ESC」キーでフォームを閉じるようにしています。
KeyDownで使うKeycodeの一覧は以下を参照してください。

ユーザーフォームのVBAコード

Option Explicit

'イベント補足クラスのコレクション
Private colEvent As New Collection

'初期処理
Private Sub UserForm_Initialize()
  Me.lblNum.Caption = ""
  Call SetControlEvent("btn*")
End Sub

'ボタンをイベント処理クラスに設定
Private Sub SetControlEvent(ByVal sLike As String)
  Dim clsEvent As clsEvent
  Dim ctl As Control
  For Each ctl In Me.Controls
    If ctl.Name Like sLike Then
      Set clsEvent = New clsEvent
      Set clsEvent.Button = ctl
      colEvent.Add clsEvent
    End If
  Next
End Sub

フォーム内の全コントロールから、「btn*」という名前のコントロールをイベント処理クラスに設定しています。


起動方法と起動VBAコード

標準モジュール

Sub show10key()
  frm10key.Show vbModeless
End Sub

ThisWorkbook

Private Sub Workbook_Open()
  Application.OnKey "{F1}", "show10key"
End Sub

ブックを開いた際に、「F1」キーにマクロ起動を割り当てます。
それには、WorkbookのOpenイベント内でOnKeyメソッドを使います。
第124回.Workbookのイベントプロシージャー|VBA入門
・Workbookのイベント一覧 ・イベントプロシージャー追加のVBE操作 ・Workbook_Open:Workbookのイベント ・Workbook_BeforeClose:Workbookのイベント ・Workbook_SheetChange:Workbookのイベント
第128回.マクロをショートカットで起動(OnKeyメソッド)|VBA入門
マクロVBAをショートカットで起動したい時には、Application.OnKeyメソッドを使います。通常マクロはボタンや図形に登録して起動しますが、これらをクリックするにはマウス操作が必要です。Application.OnKeyメソッドを使う事でショートカットで起動できるようになります。




同じテーマ「ユーザーフォーム入門」の記事

第18回.2段階のコンボボックス
第19回.数値専用のテキストボックス
第20回.テキストボックスの各種イベント
第21回.ユーザーフォームの各種イベント
第22回.コントロールの動的作成
第23回.イベントプロシージャーの共通化
第24回.イベントプロシージャーの共通化(Enter,Exit)
第25回.簡易音楽プレーヤーの作成
第26回.プログレスバーを自作する
第27回.インクリメンタルサーチの実装
第28回.テンキーのスクリーンキーボード作成


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ