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

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

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

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

Q&A

解決済

3回答

546閲覧

VBAでテキストボックスの入力チェック

natsu25

総合スコア46

VBA

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

0グッド

0クリップ

投稿2022/08/18 08:18

前提

VBAで学内のスタッフ向けツールのプロトタイプを作成しています。
テキストボックスに入力された値の不正チェックの実装方法をご教示頂きたいです。

※ テキストボックスの名前はtxt1.Textとtxt2.Textとしています。

実現したいこと

・2つのテキストボックスに入力された値が半角数値であるか確認したい
・どちらか一方が半角数値でなかった場合任意のメッセージを表示させ値をクリアし処理を終了したい
・どちらも半角数値が入力された場合は何もしない

発生している問題・エラーメッセージ

テキストボックスに正しい値(半角数値)を入力してもエラー時を想定したメッセージが表示されてしまう

該当のソースコード

VBA

1Private Function ChkParam() 2 Input1 = txt1.Text 3 Input2 = txt2.Text 4 5 If Not IsNumeric(Input1) Or IsNumeric(Input2) Then 6 MsgBox "半角数値を入力してください。" 7 ChkParam = False 8 End If 9 10 ChkParam = True 11 12End Function

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

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

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

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

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

guest

回答3

0

テキストボックスに正しい値(半角数値)を入力してもエラー時を想定したメッセージが表示されてしまう

条件式が正しくありません

VBA

1 If Not IsNumeric(Input1) Or IsNumeric(Input2) Then ' NG)Input1が数値でないまたはInput2が数値 2 If Not (IsNumeric(Input1) And IsNumeric(Input2)) Then ' OK)[Input1が数値かつInput2が数値] ではない

2つのテキストボックスに入力された値が半角数値であるか確認したい

IsNumeric()は値が全角/半角かは関係がありません。数値とみなされる文字列であればTrueを返します。
ですので、入力値をStrConv()で自動的に半角に置き換えて処理するようにしてはどうでしょうか。

VBA

1Private Function ChkParam() 2 ChkParam = True 3 txt1.Text= StrConv(txt1.Text, vbNarrow) '半角に置き換える 4 txt2.Text= StrConv(txt2.Text, vbNarrow) 5 Input1 = txt1.Text 6 Input2 = txt2.Text 7 If Not (IsNumeric(Input1) And IsNumeric(Input2)) Then 8 MsgBox "数値を入力してください。" 9 ChkParam = False 10 End If 11End Function

投稿2022/08/18 09:28

編集2022/08/18 09:34
sazi

総合スコア25173

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

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

0

ベストアンサー

いろいろ突っ込みどころがありますが、
まず、条件式は下記のようにしましょう。

If Not IsNumeric(Input1) Or Not IsNumeric(Input2) Then

または、

If (Not IsNumeric(Input1)) Or (Not IsNumeric(Input2)) Then

演算子には優先順位がありますので、必要に応じて()で囲む必要があります。

次に、
ChkParam = TrueはElse節内にいれないと、結果が常にTrueになります。

vba

1 If Not (IsNumeric(Input1) And IsNumeric(Input2)) Then 2 MsgBox "半角数値を入力してください。" 3 ChkParam = False 4 Else 5 ChkParam = True 6 End If

あと、IsNumeric だと、全角数字でも True になります。
さらに"123d4"とか"&H123"でもTrueになります。(指数表記と16進数表記)
他にもいろいろあります。

条件が純粋に半角数字のみということだと、IsNumericではだめです。
純粋に半角数字(0から9)のみという条件だと、
like演算子で下記のような式で 0から9 以外の文字が含まれているか判定できます。

文字列 Like "*[!0-9]*"

上記を考慮して、

vba

1Public Function ChkParam() 2 Dim Input1 As String, Input2 As String 3 Input1 = txt1.Text 4 Input2 = txt2.Text 5 6 If Input1 & Input2 Like "*[!0-9]*" Then 7 MsgBox "半角数値を入力してください。" 8 ChkParam = False 9 Else 10 ChkParam = True 11 End If 12End Function

投稿2022/08/18 09:12

編集2022/08/18 09:33
hatena19

総合スコア33699

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

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

0

OrじゃなくてAndでは?Orだとどちらか片方だけTrueでもTrue扱いです
あとVBAではNotのほうが優先順位が高いのでそれではInput1のisNumericしかNotできていません
両方使うときは括弧で囲んで優先順位を調整してください

投稿2022/08/18 08:41

RiaFeed

総合スコア2701

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問