
いつもお世話になっております。
エクセルの画面に画像のようなユーザーフォームを作ってテンキーのように、セルに値を入力することは出来るのでしょうか?
もし出来るようでしたら、ボタンの割り当て方や、作成方法を教えて頂きたいです。
1)ユーザーフォームを使う理由は使わない時には非表示にしたいからです。
他の方法でも表示、非表示の切り替えが聞くのならユーザーフォームでなくても問題ありません
2)工事現場でつかいます。作業者が手袋をしたままタブレット端末で入力するので、大きいボタンで必要なキーだけを表示して、使わないときは非表示にできればと思っております。
すいませんが詳しい方、説明の上手な方、画像のようなことが可能でしたら作成方法を教えて下さい。よろしくお願いします。
※まだVBA初心者で簡単なユーザーフォームを作れる程度です。教えて頂いてもわからないかもしれませんが、今後のヒントにでもなればそれでいいです。親切な方、説明の上手な方、よろしくお願いします。

No.1ベストアンサー
- 回答日時:
今はどうかわかりませんが、以前に同様にタッチパネル操作で機能するシステム作ったときは
適当なのが見つからず根気よく作りました
タッチしたボタンの内容をTextBox1に表示するとして
Private Sub CommandButton1_Click()
TextBox1.Value = TextBox1.Value & "1"
End Sub
Private Sub CommandButton1_Click()
TextBox1.Value = TextBox1.Value & "2"
End Sub
Private Sub CommandButton2_Click()
TextBox1.Value = TextBox1.Value & "3"
End Sub
Private Sub CommandButton3_Click()
TextBox1.Value = TextBox1.Value & "3"
End Sub
Private Sub CommandButton4_Click()
TextBox1.Value = TextBox1.Value & "4"
End Sub
以下省略
具合にします。
ボタンには、間違った場合を考慮して
クリアボタン を配置します。
Private Sub CommandButton15_Click()
TextBox1.Value = ""
End Sub
とか言った具合です。
ご解答ありがとうございます。明日、やってみます。それとすいませんが、もしご存じでしたら、あと2つ教えて下さい。
1つは「Ent」キーです。もう1つは「BackSpace」です。この2つは0~9のように割り当てられませんので。
No.4
- 回答日時:
UserForm_Activateイベントプロシジャで、TextBox1のControlSourceプロパティに、選択されているセルのアドレスを設定してみて下さい。
こんな感じです。
Private Sub UserForm_Activate()
TextBox1.ControlSource = Selection.Address
End Sub
No.3
- 回答日時:
こんにちは。
このご質問を古くあるものですが、なかなか面倒な種類ですし、単に、コマンドボタンだけではつまらないので、テンキーとの兼ね合わせをしました。
直接の回答とは言えないかもしれません。
単に、こんなふうにしても可能だという見本です。
表示部分 -> Label1
0~9 ->CommandButton0 ~CommnadButton9
Minus ->CommandButton10
Enter ->CommandButton11
Clear ->CommandButton12
テンキーとマウスと共用させています。
しかし、こんな程度でも、もう私は、すぐにできなくなっていること自体が、悲しいというか、自分の中に不安が沸き起こってきます。
昔、ここの住人のKさんが作られた方法をどうしても思い出せず、検索しても出てこないので、私独自の方法に切り替えました。まだ、バグらしきものは残っています。本来は、Win32APIでフックすべきだと思いましたが、それすら、曖昧になってきています。以前の教えて!gooは、こんなコードでは、お茶を濁すようなものでしかなかったのでした。それに、今は、私の力も衰えてしまいました。
古臭い書き方は、私の過去に書いていたものを応用したからですが、これは、私のオリジナルです。
>あとはカーソルのあるセルに入力できるようにするだけですが、
参考にするべきところがありましたら、ご利用ください。
>Sheets("sheet1").Range("c16") = TextBox1
変数を経由するのが基本だと思います。
'-------------
'UserForm Module
Dim myLbl As Variant
'本来なら入れるべきOption Base 1は入れていません。
Private Sub UserForm_Initialize()
Dim myCmdBtns As New Collection
Dim i As Integer
For i = 0 To 11
With myCmdBtns
.Add Item:=Me.Controls("CommandButton" & i)
End With
Next i
For i = 1 To 12
Set myClass1(i) = New Class1
With myClass1(i)
.Cmd = myCmdBtns(i)
.Index = i - 1
End With
Next i
Set myClass1(13) = New Class1
myClass1(13).Lbl = Me.Label1
End Sub
'標準モジュール
Public myClass1(13) As Class1
Public num2 As Variant
Sub ボタン1_Click()
UserForm1.Show False
End Sub
'Class1 Module
Option Explicit
Private WithEvents myCmd As MSForms.CommandButton
Private WithEvents myLbl As MSForms.Label
Private m_intIndex As Integer
'Private Declare Function GetKeyboardState Lib "user32.dll" (lpKeyState As Any) As Long
'Private bytKeyState(255) As Byte
Private Sub Class_Initialize()
num2 = 0
End Sub
Public Property Get Cmd() As MSForms.CommandButton
Set Cmd = myCmd
End Property
Public Property Get Lbl() As MSForms.Label
Set Lbl = myLbl
End Property
Public Property Let Cmd(ByVal cmdNewValue As MSForms.CommandButton)
Set myCmd = cmdNewValue
End Property
Public Property Let Lbl(ByVal lblNewValue As MSForms.Label)
Set myLbl = lblNewValue
End Property
Public Property Get Index() As Integer
Index = m_intIndex
End Property
Public Property Let Index(ByVal intNewValue As Integer)
m_intIndex = intNewValue
End Property
'-----
Private Sub myCmd_Click()
Dim num As Variant
If myLbl Is Nothing Then
Set myLbl = UserForm1.Label1
End If
If myLbl.Caption = "" Then myLbl.Caption = "0"
num = CDbl(myLbl.Caption)
If m_intIndex = 0 And myLbl.Caption = "0" Then
myLbl.Caption = "0"
ElseIf m_intIndex < 10 Then
'Tenkeys 0-9
myLbl.Caption = Format$(CDbl(myLbl.Caption) & m_intIndex, "#,##0")
ElseIf m_intIndex = 10 Then
myLbl.Caption = Format$(CDbl(myLbl.Caption) * -1, "#,##0")
ElseIf m_intIndex = 11 Then
'EnterKey
ActiveCell.Value = CDbl(myLbl.Caption)
myLbl.Caption = "0"
ElseIf m_intIndex = 12 Then
'ClearKey
myLbl.Caption = "0"
End If
End Sub
Private Sub myCmd_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim num As Variant
If myLbl Is Nothing Then Set myLbl = UserForm1.Label1
Select Case KeyCode.Value
Case 95 To 105
num = KeyCode.Value - 96
If num2 = "" Then num2 = 0
myLbl.Caption = Format$(CDbl(num2) & num, "#,##0")
' If GetKeyboardState(bytKeyState(0)) > 0 Then
If myLbl.Caption = "" Then
num2 = ""
Else
num2 = myLbl.Caption
End If
' End If
Case 8
If Len(myLbl.Caption) = 1 Then myLbl.Caption = "0": Exit Sub
myLbl.Caption = Format(CDbl(Mid(num2, 1, Len(num2) - 1)), "#,##0")
num2 = CDbl(myLbl.Caption)
Case 13
'EnterKey
ActiveCell.Value = CDbl(num2)
myLbl.Caption = "0"
Case 38
'BackSpace
num2 = myLbl.Caption
On Error Resume Next
ActiveCell.Offset(-1, 0).Select
On Error GoTo 0
myLbl.Caption = num2
Case 40
num2 = myLbl.Caption
On Error Resume Next
ActiveCell.Offset(1, 0).Select
On Error GoTo 0
myLbl.Caption = num2
Case 67, 99
'clear button
myLbl.Caption = "0"
num2 = 0
Case 109
'BackSpace
myLbl.Caption = Format$(CDbl(myLbl.Caption) * -1, "#,##0")
End Select
End Sub

No.2
- 回答日時:
ご解答頂きありがとうございます。いろいろ参考になりました。
電卓の場合、「Ent」キーはテキストボックスの中の数値を計算することですが、
今回の場合、「Ent」キーは特定のセルにテキストボックスの文字列を流し込むということなのですね。
自分のやりたい事がなにかわかりました。
ご解答、ありがとうございました。。
質問はもう少しの間あけておきますので、何かありましたら、またお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- JavaScript テーブルの中のセレクトボックスの値が0のとき、非表示にしたい 3 2022/05/29 10:13
このQ&Aを見た人はこんなQ&Aも見ています
-
Excelにて、ユーザーフォームで作成したテンキーの、表示している数字を セルに転記したい
Yahoo!ショッピング
-
【タブレットPC】フォーム画面にキーボードを作成して入力したい
Access(アクセス)
-
Excel VBAでスクリーンキーボードを起動
Excel(エクセル)
-
-
4
Excel VBA マクロ実行中のみテンキー操作できるようにしたい
Visual Basic(VBA)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
バックスペース機能の作り方
Visual Basic(VBA)
-
7
ユーザーフォームのテキストボックスにテンキーの小数点が入力できない
Microsoft ASP
-
8
ExcelVBAでセルをクリックしてユーザーフォームを表示するには
Excel(エクセル)
-
9
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
10
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
11
EXCEL VBAでテンキーコントロールはないの
Excel(エクセル)
-
12
UserForm1.Showでエラーになります。
工学
-
13
セルの文字を「印刷時だけ非表示」にしたいです。
Excel(エクセル)
-
14
Excelで教えてください。 バーコードリーダーで読み込みしたあと セルを自動で次のセルに行くように
Excel(エクセル)
-
15
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
16
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
17
エクセル 入力規則のリストボタンのサイズは変えられますか?
Excel(エクセル)
-
18
フォーム上の現在アクティブなコントロールの取得
Access(アクセス)
-
19
[EXCEL]ボタン押す→時刻が表に入る方法
Excel(エクセル)
-
20
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
マクロを登録しているボタンが...
-
【Excel VBA】マクロボタンを表...
-
複数シートのボタンに同一の動...
-
UPS警告音を止めたい
-
Excelで、ボタンにコメントをつ...
-
フォームコントロールから作っ...
-
EXCELのマクロが 実行時エラー5...
-
エクセルで、オプションボタン...
-
VBAでオプションボタンなどそれ...
-
トグルボタンをオプションボタ...
-
エクセルでマクロボタンを押す...
-
オブジェクト名をVBAで指定...
-
エクセルの×ボタンを消したい
-
VBAでクリアボタンのみ残してシ...
-
エクセルの画面にユーザーフォ...
-
【Excel】行移動ボタンを沢山作...
-
Accessのフォームでタブの色
-
YouTube見てるとたまに勝手にSi...
-
マクロで作ったボタンのサイズ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
UPS警告音を止めたい
-
【Excel VBA】マクロボタンを表...
-
フォームコントロールから作っ...
-
エクセルの画面にユーザーフォ...
-
入力済み、選択したセルに連動...
-
EXCELのマクロが 実行時エラー5...
-
Excel ラジオボタンのリセット...
-
複数シートのボタンに同一の動...
-
マクロで作ったボタンのサイズ...
-
オブジェクト名をVBAで指定...
-
ユーザーフォームをショートカ...
-
エクセルで、オプションボタン...
-
マクロを登録しているボタンが...
-
Excelで、ボタンにコメントをつ...
-
EXCELの塗りつぶしのボタ...
-
VBAでクリアボタンのみ残してシ...
-
excel スクロールしても常にボ...
-
VBAでオプションボタンなどそれ...
-
エクセルでマクロボタンを押す...
おすすめ情報
No.1さん、No.2さん、アドバイスありがとうございます。
http://bit.ly/297RCeDを参考にして、
C16セルに入力するところま出来ました。
あとはカーソルのあるセルに入力できるようにするだけですが、
今の私ではどうすればいいのかわかりません
もしご存じでしたら教えて下さい。
Private Sub CommandButton1_Click()
Sheets("sheet1").Range("c16") = TextBox1
End Sub
Private Sub CommandButton2_Click()
TextBox1.Value = TextBox1.Value & "1"
End Sub
Private Sub CommandButton3_Click()
TextBox1.Value = TextBox1.Value & "2"
End Sub
いろいろなアドバイスありがとうございました。みなさんのおかげで、画像のようにできました。
コードを貼り付けようとしましたが、文字数が大きくオーバーしたので、今回はお礼のコメントのみとさせて頂きました。
この度は様々なアドバイスを頂き、本当にありがとうございました。私はこちらをよく利用しますので、機会がありましたら、またもよろしくお願いします。