• ベストアンサー

アクセス:Inputboxへの文字列補正について

Inputboxへの入力後エラーを防止するために、(1)~(3)の条件を指定したいのです。 (1)数値(半角)以外を入力できないようにしたい (2)文字列中もしくは文字列前後に空白が含まれる場合は削除したい (3)全角で数値を入力した場合は、半角に補正されるように指定したい (4)文字が入力されたら、「数字を入力してください」というメッセージをいれる 一気に色々な補正をかけようとしたら、エラーになってしまいました。 うまく関数を組み立てることができません。。。 よろしくお願いいたしますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)

回答No.3

> (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

konbu009
質問者

お礼

とても参考になりました。 ありがとうございました!

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

まず、以下のサイトにある 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)はクリアしたような、しないような。

konbu009
質問者

お礼

正規表現とは初めて聞きました! 丁寧なご回答、ありがとうございます!!

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

正規表現を使って、こんな感じとか? 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