「これはヤバかったな」という遅刻エピソード

お世話になります。
Excel2003バージョンを使っています。

ユーザーフォームで、VLOOKUP関数を使っているのですが、「TEXTBOX2」に間違った文字を入力して該当する検索値がない時は、エラー処理として"範囲外です"とメッセージボックスが出るようにしています。その場合、同時に「TEXTBOX2」に間違って入力した文字もクリアされるようにするにはどうすればいいでしょうか?因みに参照する側のシート名は"名簿"でセルの範囲名が"data"となっています。 何卒よろしくお願いします。

現在のコードは以下の通りです。


Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim x As Long

'テキストボックス2の値を取得
x = TextBox2.Value

On Error GoTo ErrHdl

With ActiveSheet

'B列2列目を表示
TextBox3.Value = _
Application.WorksheetFunction.VLookup(x, Worksheets("名簿").Range("data"), 2, False) '参照する表の2列目

'C列目を表示
TextBox4.Value = _
Application.WorksheetFunction.VLookup(x, Worksheets("名簿").Range("data"), 3, False) '参照する表の3列目

'D列目を表示
・・・・・・・
End With

Exit Sub

ErrHdl:
MsgBox "範囲外です"

End Sub

A 回答 (3件)

的外れだったらゴメン



ErrHdl:~End subの間に TEXTBOX2="" を追加では問題がありますか

ErrHdl:
MsgBox "範囲外です"
TEXTBOX2=""
End Sub
    • good
    • 0
この回答へのお礼

できました!こんなに簡単にできるなんて思っていなかったので。
初心者の私には助かりました。
ありがとうございました。

お礼日時:2013/03/10 08:54

まぁ純粋に趣味の問題ですが、



方法1:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 dim x as long
 x = textbox2.value
 if application.countif(worksheets("名簿").range("Data").columns(1), x) = 0 then
  msgbox "範囲外"
  textbox2 = ""
  exit sub
 end if

 textbox3 = application.vlookup(x, worksheets("名簿").range("Data"), 2, false)
 textbox4 = application.vlookup(x, worksheets("名簿").range("Data"), 3, false)
End Sub


方法2:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 dim h as range

 set h = worksheets("名簿").range("Data").columns(1).find(what:=textbox2, lookin:=xlvalues, lookat:=xlwhole)
 if h is nothing then
  msgbox "範囲外"
  textbox4 = ""
  textbox3 = ""
  textbox2 = ""
  exit sub
 end if

 textbox3 = h.offset(0, 1)
 textbox4 = h.offset(0, 2)
End Sub
    • good
    • 0
この回答へのお礼

お世話になります。
chayamatiさんの方法でできました。
keithinさんのは今後の参考にさせて頂きます。
ありがとうございました。

お礼日時:2013/03/10 09:45

もともとをTextBoxでなく ListBoxにして、間違った入力が出来なくする


マウスで、選択させて入力の手間を省く方が便利では
と思うのは私だけでしょうか。

されは、さておいて

Cancel = True
についてWeb 検索してみてください。一例ですが

Set c = Worksheets("名簿").Range("data").Find(TextBox1.Value, LookAt:=xlWhole)
If c Is Nothing Then
MsgBox "入力に間違いがあります"
Cancel = True
Else
TextBox3.Value = ・・・・
TextBox4.Value = ・・・・
・・・
End If

とかでは如何でしょうか。
    • good
    • 0
この回答へのお礼

お世話になります。
回答が来ないものと思っていたところに、hallo-2007さんが一番早く回答を頂いたので嬉しかったですね。
結果的にはchayamatiさんのコードを使わせていただきました。
hallo-2007さんの回答は今後の参考にさせてください。
ありがとうございました。

お礼日時:2013/03/10 10:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!