• ベストアンサー

エクセル2003のVBAで、ユーザーフォームにあるテキストボックスに入力制限をつけたいのですが

エクセル2003のVBAで、ユーザーフォーム上にあるテキストボックスに入力制限をつけようとしています。 エクセルのセル13列目にdeg値 0 0.5 1 1.5 2 ・ ・ ・ があります。 ここにない値を入力するとエラーメッセージを表示させます。 下記のコードで、小数点を入力した瞬間(例えば「1.」)にエラーメッセージが表示されてしまいます。 どう修正したらよいか、どなたか分かりませんでしょうか? よろしくお願いいたします。 Private Sub TextBox21_Change() For i = 7 To 1446 If TextBox21.Value = ThisWorkbook.Sheets(\"default\").Cells(i, 13).Value Then Exit For Next i If i = 1447 Then MsgBox \"deg値と一致しません。補正値を入れなおしてください。\" TextBox21.Text = \"\" End If End Sub

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

つぎのようにするとか。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) For i = 7 To 1446 If Val(TextBox1.Value) = ThisWorkbook.Sheets(1).Cells(i, 13).Value Then Exit For Next i If i = 1447 Then MsgBox "\deg値と一致しません。補正値を入れなおしてください。\" TextBox1.Text = "\\" Else MsgBox "yes" End If End Sub

ddtqp
質問者

お礼

changeイベントで、以下のVal()をいれたら、 ばっちり動作するようになりました。 ありがとうございます! If Val(TextBox21.Value) = ThisWorkbook.Sheets("default").Cells(i, 13).Value Then Exit For

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • jellya_a
  • ベストアンサー率35% (12/34)
回答No.2

違っていたらすみません。 Changeイベントでなく、Exitイベントを使用したら いかがでしょうか? フォーカスが別に移ったときに処理を行うイベントです。

全文を見る
すると、全ての回答が全文表示されます。
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

限られた値しか受け付けないというのであるなら、入力をリストボックスにして選択させたる方式にした方がよいのでは? シートの値と連動させることも可能みたいだし。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAでユーザーフォームのテキストボックス

    ユーザーフォーム上にテキストボックスを8個設置しました。 そこに数値が入力された場合は自動的にカンマ区切りが表示されるように以下のコードを書きました。 これで希望の動きはしてくれるのですが、このやりかたは正しいでしょうか? また、テキストボックスは8個あるので、それぞれに下記のように8通りコードをかかなければいけないのでしょうか?ご教示ください。 Private Sub TextBox1_Change()   If IsNumeric(TextBox1.Value) Then Application.EnableEvents=False     TextBox1.Text = Format(TextBox1.Value, "#,##0") Application.EnableEvents=True   End If End Sub 途中(2~7)略 Private Sub TextBox8_Change()   If IsNumeric(TextBox8.Value) Then Application.EnableEvents=False     TextBox8.Text = Format(TextBox8.Value, "#,##0") Application.EnableEvents=True   End If End Sub

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • VBAで数値入力について

    Excel VBAで、UserFormにTextBoxを配置しています。 TextBoxに入力された数値は、半角数値で正数で小数点以下の桁数は1までと制限したいです。 現在は下記のプログラムにしているのですが、「1.2.3」と入力されるとエラーが表示されずに通ってしまいます。。。 どのようにしたらよいのでしょうか。 For i = To Len(TextBox1.Text) If Not Mid(TextBox1.Text, i, 1) Like "[0-9 And .]" Then Message"半角数値ではありません" Exit Sub End If Next i If Val(Text1.Text) = 0 Or TextBox1.Text = "" Then Message"数値を入力してください" Exit Sub End If

  • ユーザーフォームのテキストボックスでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 上から順番に入力した際、テキストボックス5に値を入たら、 listのシートから該当するもの(項目は20個)をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

  • EXCEL VBA ユーザーフォーム内のテキストボックスを一括処理する方法について

    EXCEL VBAのユーザーフォームについて質問があります。 ユーザーフォームを作り、その中にコンボボックスを1個、テキストボックスを100個設置する。 コンボボックスの値が1のときはテキストボックス1~テキストボックス50までのEnabledをFalseに設定し、 コンボボックスの値が2のときはテキストボックス1~テキストボックス100までのEnabled をFalseに設定する。 このとき、TextBox1.Enabled = False、TextBox2.Enabled = False・・・と一つ一つ書いていくのではなく、 セルを処理するときと同様に、テキストボックスの番号を変数にして処理することは可能でしょうか。 Private Sub ComboBox1_Change()  Dim i As Integer   If ComboBox1.Value = 1 Then   For i = 1 To 50   TextBox(i).Enabled = False   Next i   ElseIf ComboBox1.Value = 2 Then   For i = 1 To 100   TextBox(i).Enabled = False   Next i   End If End Sub というような処理をイメージしているのですが、うまくいきません。どうぞよろしくお願いいたします。

  • Excel VBA テキストボックスを検索

    テキストボックス3に数値を入力し ExcelのA列にあるか検索をかける。 ある場合は、B列の同じ行に 「みーつけた!」と入力。 その設定で組んでみたのですが、 テキストボックス3にデータを6桁入力しようとすると 6桁目にオーバーフローエラーが出ます。 このプログラムの何処がおかしいのでしょうか? Private Sub TextBox3_Change() Dim Number As Integer If TextBox3.Value <> "" Then '空じゃない場合 Number = TextBox3.Value Call 検索(Number) MsgBox TextBox3.Value End If End Sub Sub 検索(ByVal Number As Variant) Dim FoundCell As Range Set FoundCell = Range("A:A").Cells.Find(What:=Number, lookat:=xlPart) If FoundCell Is Nothing Then Else FoundCell.Activate Range("O" & ActiveCell.Row).Value = "みーつけた!" End If End Sub

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • リストボックスからの入力をテキストに貼付

    下記コードではリストボックあ行選択しテキスト1~6に入力後、クリアボタンで消去したあと、か行選択しテキストに入力したら7~貼付けになるクリアボタンで消去後、改めてテキスト1~入力するコードがありますか。どなたか解る方よろしくお願いします。 Private Sub 実行_Click() Static cnt As Integer Dim i As Integer If Listbox.ListIndex = -1 Then Exit Sub For i = 0 To Listbox.ListCount - 1 If Listbox.Selected(i) Then cnt = cnt + 1 If cnt > 10 Then cnt = 1 Me.Controls("TextBox" & cnt).Text = Listbox.List(i) End If Next End Sub Private Sub クリア_Click() Dim tbCont As Control With Me.MultiPage1 For Each tbCont In .Pages(.Value).Controls If TypeName(tbCont) = "TextBox" Then tbCont.Value = Null End If Next tbCont End With End Sub

  • エクセル ユーザーフォームでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 テキストボックス5に値を入れ、 listのシートから該当する文字をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

  • エクセルVBA テキストボックス処理?

    エクセル2000 VBAにて入力フォームの テキストボックス1に下記を書き込んだのですが カーソルがテキストボックス1にあるとき 他の処理(コマンドボタン、マウスにて他のテキストボックスに カーソルを移すなど)が出来ません。 フォームを閉じるときもメッセージボックスのコメントがでます。 どの処理を行ってもテキストボックス1の処理が終わってからしか 行わないようなのですが??? Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Integer '品番確認用 For i = 3 To 100 If Sheets("品番マスタ").Cells(i, 1) = TextBox1.Text Then Label1 = Sheets("品番マスタ").Cells(i, 2).Value 'メーカー Label2 = Sheets("品番マスタ").Cells(i, 3).Value 'タイプ Label3 = Sheets("品番マスタ").Cells(i, 4).Value '品名 Label4 = Sheets("品番マスタ").Cells(i, 5).Value '内容量 Label6 = Sheets("品番マスタ").Cells(i, 8).Value '背番号 Exit Sub End If Next i MsgBox "品番がありません" TextBox1 = "" Cancel = True End Sub どのように変更すればいいでしょうか?

このQ&Aのポイント
  • ブレーカーが落ちてからWi-Fiが繋がらない状況で、携帯だけに繋がらない。iPhoneを使用しているが、Wi-Fiに繋がってもすぐにインターネット未接続状態になる。また、管理画面も開けない状態だ。過去にブレーカーが落ちた時はiPhoneに簡単セットアップ4の画面が出現し、IDとパスワードを入力して繋がったが、今回はつながらない。対処方法を教えて欲しい。
  • Wi-Fiが繋がらないという状況で、ブレーカーが落ちた後から携帯だけが繋がらない。iPhoneを使用しているが、Wi-Fiに繋がってもすぐにインターネット未接続状態になってしまう。管理画面も開けない。過去には簡単セットアップ4の画面が出現し、IDとパスワードを入力することでつながったが、今回はつながらない。管理画面には通信エラーか接続エラーの表示が出る。対処方法を教えてほしい。
  • ブレーカーが落ちた後、Wi-Fiが繋がらない状況で携帯だけが接続できない。iPhoneを使用しており、Wi-Fiに繋がるもののすぐにインターネット未接続になってしまう。管理画面も開けない。過去には簡単セットアップ4の画面が出現し、IDとパスワードを入力することで繋がったが、今回はつながらない。管理画面で通信エラーか接続エラーの表示が出る。対処方法を教えてください。
回答を見る

専門家に質問してみよう