Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1493 / 13646 ツリー ←次へ | 前へ→

【74065】Excel2003 vba テキストボックスに半角数字と小数点のみを入力できるようにしたい... 初心者です 13/4/13(土) 20:13 質問[未読]
【74066】Re:Excel2003 vba テキストボックスに半角数字と小... UO3 13/4/13(土) 20:55 発言[未読]
【74067】Re:Excel2003 vba テキストボックスに半角数字と小... 初心者です 13/4/13(土) 21:31 質問[未読]
【74068】Re:Excel2003 vba テキストボックスに半角数字と小... UO3 13/4/13(土) 21:50 発言[未読]
【74069】Re:Excel2003 vba テキストボックスに半角数字と小... UO3 13/4/13(土) 22:08 発言[未読]
【74070】Re:Excel2003 vba テキストボックスに半角数字と小... 初心者です 13/4/13(土) 22:21 お礼[未読]
【74071】Re:Excel2003 vba テキストボックスに半角数字と小... Yuki 13/4/14(日) 8:59 発言[未読]
【74072】Re:Excel2003 vba テキストボックスに半角数字と小... Yuki 13/4/14(日) 9:07 発言[未読]
【74078】Re:Excel2003 vba テキストボックスに半角数字と小... 初心者です 13/4/16(火) 17:19 お礼[未読]

【74065】Excel2003 vba テキストボックスに半角数字と小...
質問  初心者です  - 13/4/13(土) 20:13 -

引用なし
パスワード
   初めての投稿失礼いたします。

ユーザーフォームのテキストボックスに半角数字と小数点を入力し、その内容をAccessに登録していくシステムをつくっています。

その、テキストボックスへの入力の質問です。

目標としまして、小数点が1度入力された後、次にまた小数点が入力された瞬間に「小数点はすでに入力されています」みたいなメッセージを出して、小数点が入力されないようにしたいです。


現在、以下のような状態です。


'半角数字(半角数字、小数点OKだが、1..1.などと小数点が複数打ててしまう

Private Sub test_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  
  If Chr$(KeyAscii.Value) Like "[!0-9.]" Then

    MsgBox "入力は、半角数字で入力してください。"
    KeyAscii.Value = 0
  
  '☆

  End If
End Sub


調べてみたところ、InStr()関数(?)で小数点があるかどうかを調べて、あればエラーをかえすみたいな感じにすればいいと結論になったのですが、書き方といいますか、どのようにプログラミングすればいいのかわかりません・・・


☆の部分にそのInStr文を書けばいいような気がするのですが・・・

どなたかご教授いただけないでしょうか。

【74066】Re:Excel2003 vba テキストボックスに半角数字と...
発言  UO3  - 13/4/13(土) 20:55 -

引用なし
パスワード
   ▼初心者です さん:

こんばんは
以下のような構成にされてはいかがでしょう。

Private Sub TextBox1_Change()
  CheckError TextBox1.Value
End Sub

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
  Cancel = CheckError(TextBox1.Value)
End Sub

Private Function CheckError(s As String) As Boolean

  If Len(s) = 0 Then Exit Function '空白
  
  If Not IsNumeric(s) Then
    MsgBox "入力は、半角数字で入力してください"
    CheckError = True
  End If
  
End Function

【74067】Re:Excel2003 vba テキストボックスに半角数字と...
質問  初心者です  - 13/4/13(土) 21:31 -

引用なし
パスワード
   UO3さん、迅速なアドバイスまことにありがとうございます。

書いていただいたプログラムの内容を1から教えていただきたいという願望もありつつ(笑

本題へ移らせていただきます。

以下のようにコードをとりあえずつなげてみて動かしてみました。

Private Sub test_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  
  If Chr$(KeyAscii.Value) Like "[!0-9.]" Then

    MsgBox "入力は、半角数字で入力してください。"
    KeyAscii.Value = 0
  
  End If
End Sub

Private Sub test_Change()
  CheckError test.Value
End Sub

Private Sub test_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
  Cancel = CheckError(test.Value)
End Sub

Private Function CheckError(s As String) As Boolean

  If Len(s) = 0 Then Exit Function '空白
 
  If Not IsNumeric(s) Then
    MsgBox "小数点が重複しています。"
    CheckError = True
  End If
 
End Function

すると、テキストボックスで小数点を2回以上入力するとメッセージがでて、正しい入力を催促できるようになりました。
ありがとうございます。


さらになのですが・・・
小数点を2回以上入力するとエラーがでて次に進めなくなるのですが、テキストボックス上に小数点がそのまま入力されてしまいます。

エラーを出しつつ、2回目からの小数点入力を無効にしたりできるのでしょうか?

【74068】Re:Excel2003 vba テキストボックスに半角数字と...
発言  UO3  - 13/4/13(土) 21:50 -

引用なし
パスワード
   ▼初心者です さん:

こんばんは

まず、test_KeyPress は不要です。
test_KeyPress のかわりにChangeを使いました。
そうしたことにより、ご指摘の通り、2つめの . 、あるいは警告を無視しながら
3つめ、4つめの . も入力できますし、消えないわけですが、ここでタブキーをおして
次のコントロールに進もうとしたり、別途更新ボタンのようなものがあって、更新しようとしても
そこで、エラーメッセージがでて、正しい値に直さない限り、このテキストボックスから
脱出できません。
そのための仕掛けが BeforeUpdate です。

で、この構成にしてはいかがですかという、私からの提案です。

【74069】Re:Excel2003 vba テキストボックスに半角数字と...
発言  UO3  - 13/4/13(土) 22:08 -

引用なし
パスワード
   ▼初心者です さん:

実は、私の本当の提案は Change もやめて BeforeUpdate 一本なんですが
入力した瞬間にチェックしたいということでしょうから、Change「も」加えたものです。

で、やはり KeyPress でいきたいということなら、CHange も BefreUpdateもやめて
KeyPress一本で、以下のようにされてもよろしいかと。

Private Sub test_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  Dim er As Boolean
  
  If Chr$(KeyAscii.Value) = "." Then
    If InStr(test.Value, ".") > 0 Then
      MsgBox "ピリオドを2つ使ってはいけません"
      er = True
    End If
  ElseIf Chr$(KeyAscii.Value) Like "[!0-9]" Then
    MsgBox "入力は、半角数字で入力してください。"
    er = True
  End If
    
  If er Then KeyAscii.Value = 0
  
End Sub

【74070】Re:Excel2003 vba テキストボックスに半角数字と...
お礼  初心者です  - 13/4/13(土) 22:21 -

引用なし
パスワード
   UO3さん

いくつもの提案本当にありがとうございます。

さらに、ひとつひとつ説明していただき感謝しております。

何回も質問してしまい、申し訳ありませんでした。

全て一度ためしたいと思います。

迅速な対応ありがとうございました。

【74071】Re:Excel2003 vba テキストボックスに半角数字と...
発言  Yuki  - 13/4/14(日) 8:59 -

引用なし
パスワード
   ▼初心者です さん:
もう解決されているようですが
参考に

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  If Not IsNumeric(TextBox1.Value) Then '.が1個以上
    Cancel = True
  End If
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If Not Chr(KeyAscii) Like "[0-9.]" Then
    KeyAscii = 0
  End If
End Sub

【74072】Re:Excel2003 vba テキストボックスに半角数字と...
発言  Yuki  - 13/4/14(日) 9:07 -

引用なし
パスワード
   ▼初心者です さん:

失礼 半角でしたね 修正です。
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  If LenB(StrConv(TextBox1.Value, vbFromUnicode)) <> Len(TextBox1.Value) Then
    Cancel = True
  End If
  If Not IsNumeric(TextBox1.Value) Then '.が1個以上
    Cancel = True
  End If
End Sub

【74078】Re:Excel2003 vba テキストボックスに半角数字と...
お礼  初心者です  - 13/4/16(火) 17:19 -

引用なし
パスワード
   Yukiさん

わざわざありがとうございます。

大変参考になります。

ご丁寧にプログラムもしっかりのせていただき、ありがとうございました。

こちらのプログラムの方も試させていただきます。

1493 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free