- ベストアンサー
アクセス:Inputboxへの文字列補正について
Inputboxへの入力後エラーを防止するために、(1)~(3)の条件を指定したいのです。 (1)数値(半角)以外を入力できないようにしたい (2)文字列中もしくは文字列前後に空白が含まれる場合は削除したい (3)全角で数値を入力した場合は、半角に補正されるように指定したい (4)文字が入力されたら、「数字を入力してください」というメッセージをいれる 一気に色々な補正をかけようとしたら、エラーになってしまいました。 うまく関数を組み立てることができません。。。 よろしくお願いいたしますm(_ _)m
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
コードに間違いがありましたので、訂正します。 コマンドボタンクリック時のコードを下記に訂正 Sub コマンド0_Click() Dim Res As String Do Res = InputBox("数値を入力してください", "数値入力", Res) Res = StrConv(Res, vbNarrow) Res = Replace(Res, " ", "") If Res Like "*[!0-9]*" Then MsgBox "数字だけ入力してください。" Else Exit Do End If Loop Me.テキスト1 = Res End Sub 更新前処理のコードを下記に訂正 Private Sub テキスト1_BeforeUpdate(Cancel As Integer) Dim Res As String If IsNull(Me.テキスト1) Then Exit Sub If Res Like "*[!0-9]*" Then Cancel = True MsgBox "数字だけ入力してください。" End If End Sub
その他の回答 (3)
- hatena1989
- ベストアンサー率87% (378/433)
> (2)文字列中もしくは文字列前後に空白が含まれる場合は削除したい Replace関数で可能です。 > (3)全角で数値を入力した場合は、半角に補正されるように指定したい StrConv関数を使います。 > (4)文字が入力されたら、「数字を入力してください」というメッセージをいれる Like演算子でチェックできます。 フォーム上にコマンドボタンとテキストボックスを配置して、 コマンドボタンをクリック時に下記のコードを設定してください。 Sub コマンド0_Click() Dim Res As String Do Res = InputBox("数値を入力してください","数値入力",Res) Res = StrConv(Res, vbNarrow) Res = Replace(Res, " ", "") If Res Like "*[!0-9]*" True Then Res = "" MsgBox "数字だけ入力してください。" End If MsgBox Res Loop Me.テキスト1 = Res End Sub コマンドボタンをクリックすると、InputBox が表示されて、 数値のみになるまで、InputBox で再入力をそくします。。 数値のみになったら、テキスト1 に代入します。 > (1)数値(半角)以外を入力できないようにしたい テキストボックスへの入力をこのようにしたいなら、 テキストボックスの「IMEモード」プロパティを「使用不可」にして、 キー入力時のイベントプロシージャを下記にように記述します。 Private Sub テキスト1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case vbKeyBack, vbKey0 To vbKey9 Case Else KeyAscii = 0 End Select End Sub これで半角数値しか入力出来ないテキストボックスになります。 ただし、貼り付けた場合は数値以外も入力されますので、 更新前処理でチェックする必要があります。 Private Sub テキスト1_BeforeUpdate(Cancel As Integer) Dim Res As String If IsNull(Me.テキスト1) Then Exit Sub Res = StrConv(Me.テキスト1, vbNarrow) Res = Replace(Res, " ", "") If Res Like "*[!0-9]*" Then Cancel = True MsgBox "数字だけ入力してください。" End If End Sub
- piroin654
- ベストアンサー率75% (692/917)
まず、以下のサイトにある http://www.accessclub.jp/samplefile/samplefile_118.htm "先頭、文中、文末に拘わらず、スペースを取り除く" というところにあるSpaceDeleteという関数を まるまるコピーして標準モジュールに貼り付けます。 半角数値の確認は正規表現で行ないます。 フォームのボタンクリック時のイベントに以下を 設定します。ボタンクリック時ではない場合は 中身をそのまま利用してください。 Private Sub コマンド0_Click() Dim ret As String Dim obj As Object '正規表現の設定 Set obj = CreateObject("VBScript.RegExp") obj.pattern = "^\d+$" '正常入力されるまでInputBoxを表示 Do ret = InputBox("半角数値を入力してください", "数値入力") '未入力でOKの場合は処理を終了してプロシージャを抜ける If Len(ret) = 0 Then MsgBox "未入力なので処理を終了します" Exit Sub End If '半角数値の検証 'すべてのスペースを除いた文字列が半角数値の場合 If obj.Test(SpaceDelete(ret)) Then MsgBox SpaceDelete(ret) & Chr(10) & "入力正常です" Exit Do 'すべてのスペースを除いた文字列に半角数値、全角数値が混じっている場合 'この部分をはずすと半角数値のみを受け入れる ElseIf Not obj.Test(SpaceDelete(ret)) And IsNumeric(SpaceDelete(ret)) Then '入力値を CLng(SpaceDelete(ret)) に変換 MsgBox CLng(SpaceDelete(ret)) & Chr(10) & "次回は半角数値にしてください" '上記以外、数値以外が混じっている場合など Else MsgBox ret & Chr(10) & "入力しなおしてください" End If Loop Set obj = Nothing End Sub なんとか(1)から(3)はクリアしたような、しないような。
お礼
正規表現とは初めて聞きました! 丁寧なご回答、ありがとうございます!!
- nicotinism
- ベストアンサー率70% (1019/1452)
正規表現を使って、こんな感じとか? Sub test() Dim oRE As Object Dim Res As String Set oRE = CreateObject("VBScript.RegExp") Res = InputBox("数値を入力") Res = StrConv(Res, vbNarrow) Res = Replace(Res, " ", "") oRE.Global = True oRE.Pattern = "[^\d]" If oRE.test(Res) = True Then Res = "" MsgBox "数字だけ" Set oRE = Nothing Exit Sub End If MsgBox Res Set oRE = Nothing End Sub
お礼
とても参考になりました。 ありがとうございました!