質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

1161閲覧

VBAでのフォームのテキストボックス内を数字のみ入力させるようにしたい

satton0021

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/03/19 06:39

前提・実現したいこと```ここに言語を入力

コード

初めて質問します。 フォーム内で年月を入力するために、テキストボックスを2つ設定しているのですが、数字のみを入力させるようにしたいです。 また、年月がそれぞれ入力されてない場合はメッセージを表示させ、再度入力を促すように命令を記述したいです。 以下のように記述したのですが、1つにまとめて上の処理をすることは可能でしょうか? 何卒ご教授をお願いします。 Private Sub UserForm_Initialize() 'ユーザーフォームが読み込まれた時点でTextBoxのIMEModeを指定 textNen.IMEMode = 3 textTuki.IMEMode = 3 End Sub Private Sub textNen_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'キーが押されたときに発生するイベントKeyPressを使用 'Chr関数で押されたキーを判定 If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then KeyAscii = 0 End If End Sub Private Sub textTuki_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'キーが押されたときに発生するイベントKeyPressを使用 'Chr関数で押されたキーを判定 If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then KeyAscii = 0 End If End Sub Private Sub textNen_Change() 'ペーストなどで文字列が入力された場合はTextBoxの値を空欄にする If IsNumeric(textNen.Text) = False Then textNen.Text = "" Exit Sub End If End Sub Private Sub textTuki_Change() 'ペーストなどで文字列が入力された場合はTextBoxの値を空欄にする If IsNumeric(textTuki.Text) = False Then textTuki.Text = "" Exit Sub End If End Sub

エラーメッセージ

エラーは出ていませんが、再入力を促すための命令がわかりません。 ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seastar3

2019/03/19 08:19

Excel のVBAだと推測しますが、Accessかもしれません。どちらでしょうか。 どちらか質問のタグにも加えておきましょう。
satton0021

2019/03/19 08:42

タグを設定しておらず申し訳ありません。 ExcelのVBAで会っています。
guest

回答3

0

VBA

1Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) 2 Dim m As String 3 Dim v As Variant 4 5 m = Me.TextBox1.Text 6 If Len(m) = 0 Then Exit Sub 7 If IsNumeric(m) Then 8 Select Case CLng(m) 9 Case 1 To 12: Exit Sub 10 End Select 11 End If 12 13 Me.TextBox1.Text = "" 14 Cancel = True 15End Sub

こんな感じでいかがでしょうか?
だいたいこういうのは、次のテキストボックスに移動する前にチェックすると思います。
なので、BeforeUpdateイベント発生時か、
Exitイベント発生時に期待された文字が入力されたかチェックしたらいいと思います。
そして、既定の入力値以外なら、
Cancel = True
としてフォーカスの移動をキャンセルします。

あとは、好みで挙動を制御してやってください。
(コマンドボタン押下時に再度空白欄がないかチェックするとか。)

あと、個人的好みですが、いちいちメッセージボックスが出てくるのは、
うるさく感じますし、OKボタンを押させられるのも億劫なので、
必要ならラベルで、情報を表示するくらいでいいかなと思います。

最近はWebサイトでいろいろ入力すると思いますので、
そちらの挙動を参考に「どのタイミングで、こうしたら、入力しやすいな。」と
いうイメージを掴んでみたらいいと思います。

投稿2019/03/22 07:12

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いつ、どのタイミングで再入力を促したいのでしょうか。

例えば登録コマンドボタンのクリック時とするなら、下記のような感じで。

vba

1Private Sub CommandButton1_Click() 2 If Me.TextBox1.Text = "" Then 3 MsgBox "年を入力してください。" 4 Me.TextBox1.SetFocus 5 ElseIf Me.TextBox2.Text = "" Then 6 MsgBox "月を入力してください。" 7 Me.TextBox2.SetFocus 8 ElseIf Val(Me.TextBox2.Text) < 1 Or Val(Me.TextBox2.Text) > 12 Then 9 MsgBox "正しい月を入力してください。" 10 Me.TextBox2.SetFocus 11 ElseIf Not IsDate(Me.TextBox1.Text & "年" & Me.TextBox2.Text & "月") Then 12 MsgBox "正しい年を入力してください。" 13 Me.TextBox1.SetFocus 14 End If 15End Sub

投稿2019/03/19 11:32

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

丸投げですが、

Excel VBAでユーザーフォームのテキストボックスの値の形式的検証を行う

のように正規表現で入った値を検査させてから、反応させればいいでしょう。

投稿2019/03/19 08:21

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問