EXCEL VBAでテキストボックスに検索した値を表示する方法

このQ&Aのポイント
  • EXCEL VBAを使用して、テキストボックス34に入力した値をExcelのA列の値と比較し、隣のセルの値をテキストボックス4に表示する方法を教えてください。
  • また、検索が見つからない場合にはメッセージボックスを表示し、テキストボックス34のデータを消去してからフォーカスを移動させたいです。
  • 現在のコードではメッセージボックスとデータ消去は行えますが、フォーカスの移動がうまく機能しません。どのように修正すればよいでしょうか?
回答を見る
  • ベストアンサー

EXCEL VBAで・・・。

テキストボックス34に入力した値を、ExcelのA列の値より検索し その隣の値をテキストボックス4に表示させる、と言う処理をしています。 検索時に検索データが見当たらない場合、メッセージボックスを表示し、 更に、テキストボックス34のデータを消去→テキストボックス34にフォーカス移動 させたいのです。 下記のコードですと、メッセージボックス表示と テキストボックス34のデータ消去までは出来るのですが フォーカス移動してくれません。 イベントをexitにしている理由は特にないのですが、changeを使うと、 テキストボックス34に1文字入力された時点でメッセージボックスが表示されたり、 1文字でも一致するデータが順に表示されてしまいます。 (テキストボックス34に入力するデータの文字数は3文字固定です。) 何か良いお知恵がありましたら、お教え下さい。 ----------------------------------------------------------- Private Sub Textbox34_exit(ByVal Cancel As MSForms.ReturnBoolean) Dim Result As Variant Set Result = Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True) If Result Is Nothing Then MsgBox ("入力されたコードは登録されていません。") TextBox34.Text = "" TextBox34.SetFocus Else Range("A:A").Find(what:=TextBox34.Text, MatchCase:=True, matchbyte:=True).Activate ActiveCell.Offset(0, 1).Select TextBox4.Text = ActiveCell.Value End If End Sub

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

  • ベストアンサー
回答No.1

>TextBox34.SetFocus これを Cancel = True にしたら?

fk_sap
質問者

お礼

1050YENさん!!!!! ありがとうございます!!!!! すごくすごく悩んでいたので、とてもとてもうれしいです!!! 本当に助かりました! ありがとうございました!

関連するQ&A

  • エクセルVBA テキストボックスへのセットフォーカスについて

    エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

  • Excel VBA 別ブックを開かずに転記

    Excel2007のユーザーフォームについて教えてください。 ユーザーフォームを以下のように作成しました。 ■テキストボックス6つ テキストボックス2→件名 テキストボックス3→数 テキストボックス4→名前 テキストボックス5→備考1 テキストボックス6→備考2 ■コマンドボタンが1と3の2つです。 コマンドボタン1→転記と印刷 コマンドボタン3→終了 ■シートの構成  sheet"作成と一覧"   1行目を以下の項目で使用しています。  A1→番号(テキストボックス1を表示)  B1→件名(テキストボックス2を表示)  C1→数(テキストボックス3を表示)  sheet"印刷"  A1→番号(テキストボックス1を表示)  A2→件名(テキストボックス2を表示)  B2→数(テキストボックス3を表示)  A3→名前(テキストボックス4を表示)  A4→備考1(テキストボックス5を表示)  A5→備考2(テキストボックス6を表示) テキストボックスに入力した値を2つのシートにそれぞれ転記して、 シート"印刷"を2部印刷しています。 ここまで以下のコードで行いました。 Private Sub CommandButton1_Click() '入力値を作成と一覧シートに転記 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm1.TextBox1.Value Cells(行, 列 + 1) = UserForm1.TextBox2.Value Cells(行, 列 + 2) = UserForm1.TextBox3.Value '入力値を印刷シートにに転記 Worksheets("印刷").Range("A1") = UserForm1.TextBox1.Value Worksheets("印刷").Range("A2") = UserForm1.TextBox2.Value Worksheets("印刷").Range("B2") = UserForm1.TextBox3.Value Worksheets("印刷").Range("A3") = UserForm1.TextBox4.Value Worksheets("印刷").Range("A4") = UserForm1.TextBox5.Value Worksheets("印刷").Range("A5") = UserForm1.TextBox6.Value 部数 = 2 Worksheets("印刷").PrintOut Copies:=部数, Collate:=True UserForm1.TextBox1.SetFocus Cells(行 + 1, 列).Select End Sub Private Sub CommandButton3_Click() '終了ボタンで値をクリアしてウィンドウを閉じる Dim Ctrl As Control For Each Ctrl In Controls If TypeName(Ctrl) = "TextBox" Then _ Ctrl.Value = "" Next Ctrl Unload Me End Sub 教えて頂きたい事なのですが・・・ コマンドボタン1の入力値を作成と一覧シートに転記の所なのですが、 アクティブセルではなく、常にA列の最後の値の次の空白行に転記するようにしたい場合、 どのように書き換えればいいのでしょうか? もう一点ですが、 別ブックにテキストボックス1から6が入力された一覧があります。 この別ブックを開かずに、 テキストボックス1に入力された番号を探して、 テキストボックス2から6に表示されるようにしたいのです。 うまく説明できないのですが・・・ 別ブックの名前は"たちつ" 別ブックは、あいうサーバーの かきくフォルダの中のさしすフォルダです。 ブック"たちつ"に"一覧"というシートがあります。 一覧のシートのD列の3行目以降には番号が入力されており、日々増えています。 テキストボックス1に入力された番号を、 一覧のD列から探し、 I列の値をテキストボックス2へ K列の値をテキストボックス3へ L列の値をテキストボックス4へ M列の値をテキストボックス5へ J列の値をテキストボックス6へ転記させたいのです。 同じブックの別シートを参照するときには Application.VLookupで出来たのですが、 マクロの記録でやってみても、解決できませんでした。 コードをご覧いただいてお分かりの通り、 VBA超初心者です。 ネットを見ながら試行錯誤している状況です。 コードの間違い等あるかもしれませんが、 ご教示よろしくお願いいたします。

  • エクセルVBAもし同じ値なら!!

    エクセルVBAもし同じ値なら!! 開いているBookのFormから違うBookのSheet1のA列にDATAを入力することはできます。 例)TextBox1の値があれば次の列に入れることはできます。 悩んでいるのは (1)TextBox1と違うBookの"Sheet1”のA列が同じ値なら  MsgBox "既に登録済みです。"と表示させて  ElseでDATAを入力させたいです。 '使用行を格納 lngYcnt_K = SH1.UsedRange.Rows.Count For lng = 1 To lngYcnt_K 'TextBox1と同じ値を見つけてテキストボックスの値を入力。 If CStr(TextBox1.Text) = CStr(SH1.Cells(lng, 1)) Then MsgBox "既に登録済みです。" Else 最終行 = SH1.Range("a65536").End(xlUp).Row TextBox1.Text = SH1.Cells(lng, 1) TextBox2.Text = SH1.Cells(lng, 2) End If Next lng どのようにすれば良いのでしょうか?? 教えて下さい!

  • EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります

    EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります。 (1)ユーザーフォームにテキストボックスを2つ作る (2)コマンドボタンを1つ作る。 この場合に、コマンドボタンを押すと、セットフォーカスされている方のテキストボックスに「新春」と表示させることはできるのでしょうか。 キーボードは当然セットフォーカスされているテキストボックスに入力されますが それと同じ機能をコマンドボタンにも持たせたいのです。 Private Sub CommandButton1_Click() で TextBox1がセットフォーカスされているならTextBox1に"新春"と入力する TextBox2がセットフォーカスされているならTextBox2に"新春"と入力する というような条件式になるのでしょうか。 色々調べましたが答えが見当たりません。 よろしくお願いいたします。

  • VBA

    エクセルのVBAで下記のようにすると テキストボックス1=10,テキストボックス2=20の値を入力すると セル"A1"に1020と表示されます。合計を求めるにはどうすればよろしいですか?  ―・*・/は、正しい答えが表示されます。 Private Sub InputBtn_Click() Worksheets("Sheet1").Range("A1") = TextBox1.Text + TextBox2.Text End Sub

  • VBA初心者です。

    VBA初心者です。 ユーザーフォームにテキストボックスとコンボボックスを1つずつ作り、それらを Private Sub ComboBox1_Change()    TextBox1.Value = ComboBox1.Value End Sub というふうに繋いでるとき、テキストボックスにフォーカスをあてさせないようするため、 Private Sub UserForm_Initialize()    TextBox1.Enabled = False End Sub このようにしました。ここまでは問題ありません。質問したいことは、このときテキストボックスに表示させる文字が淡色になるのを防ぐ方法です。    TextBox1.Locked = True これを上に付け加えればうまくいきそうなのですが、うまくいきませんでした…。どなたか解決方法を教えて下さい。

  • エクセルVBAテキストボックスをシートに…

    TextBox1に会社名、TextBox2に商品名、TextBox3に金額、TextBox4と5にも商品名と金額を入力するとして、   A  B  C 1 会社 商品 金額 2 上みたいにシートに表示させたいのですが、TextBox4と5が入力されている場合はB2、C2にも値が入り、新しくテキストボックスに入力をしたときはその下のセルに表示されるようにしたいです。 分かりにくい説明ですが宜しくお願いします。

  • VBAの計算について教えてください。

    お世話になります。 VBA超初心者です。 教えて頂けると助かります。 ユーザーフォームにテキストボックス1、2、3を作成し、それらを計算させて テキストボックス4に表示をさせたいと考えています。 テキストボックスに入力するパターンは以下の2種類です。 (1)すべてのテキストボックスに数値が入る (2)テキストボックス3のみに数値が入る 行いたい計算は、“(テキストボックス1 × テキストボックス2) + テキストボックス3”です。 曲りなりに作成してみましたが、テキストボックス3の数値を変えた時や削除した時などに、 テキストボックス4に入っている数値が残っていたりと、思うようにできません。 作成したものを掲載しておきます。 何卒よろしくお願いします。 テキストボックス1を変更したとき 1、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox1_Change() If TextBox1.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス2を変更したとき 2、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox2_Change() If TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス3を変更したとき 1、2、3に数値が入っていれば、以下の計算を。 1か2に数値がなく、3に数値があれば、3の数値をテキストボックス4へ。 それ以外は“0”をテキストボックス4へ Private Sub TextBox3_Change() If TextBox1.Value = True And TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) ElseIf TextBox1.Value = False or TextBox2.Value = False And TextBox3.Value = True Then TextBox4 = Val(TextBox3.Text) Else texbox24 = 0 End If End SubEnd Sub

  • VB2005でExcelのアクティブセルに文字を入力したあとに

    VB2005初心者です。 VB2005のTextBox1に表示された文字をExcelのActiveCellに入力するプログラムを先ほど教えて頂きました。 そのあとの追加動作でActiveCellに文字を入力した後、ActiveCellを一段下げ、TextBox1の文字が変化したらActiveCellに変化した文字を入力するような繰り返し処理をさせるにはどのようにプログラムすればいいのでしょうか? 以下のコードはTextBox1の文字をActiveCellに表示させるプログラムです。ここにどのように追加すればいいのか教えて頂けませんでしょうか? Dim xlApp As Object = GetObject(, "Excel.Application") xlApp.ActiveCell.value = TextBox1.Text xlApp = Nothing どうぞよろしくお願いいたします。

  • エクセルVBAで複数条件とデーターの重複チェック

    ユーザーフォーム(UserForm1)からSheets("データー")に転記しています 今現在はUserForm1のデーターを入力後「CommandButton2」でシートに書き込みしていますが、重複データーが出て来るので、「CommandButton2」を押した時に重複を防ぎたいのです データーはSheets("データー")の最終行に次々と転記していってます Sheets("データー")に見出し行あり Dim RowNum As Long '最終行 その中で[Me.textbox1]&[Me.textbox3]は必須項目したい .Cells(RowNum, 3).Value = Me.textbox1.Value  'メイン:必須項目 .Cells(RowNum, 4).Value = Me.textbox2.Value  'サブキー:空白でもOK .Cells(RowNum, 5).Value = Me.textbox3.Value  'キー:必須項目 やりたいこと ユーザーフォーム(UserForm1)のテキストボックス入力完了後「CommandButton2」でシートに書き込み時に重複チェック 【UserForm1上の空白チェック】 (1)Me.textbox1&Me.textbox2&Me.textbox3の空白チェック 条件 Me.textbox2は空白でもOK (2)Me.textbox1が空白の場合UserForm1に入力したデーターを保持したままtextbox1をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (3)Me.textbox3が空白の場合UserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (4)Me.textbox2が空白の時はメッセージを表示「空白のままでいいですか?はい・いいえ」 (5)はいの時は処理を続行 (6)いいえの場合は場合UserForm1に入力したデーターを保持したままtextbox2をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) 【データーシートとの重複チェック】 (7)textbox3&Sheets("データー")の該当全セル列の重複チェック 条件1 textbox2が空白の時 Me.textbox1&&Me.textbox3とSheets("データー")メイン&キー該当全セル列との重複チェック (8)重複の場合はメッセージを表示「キーが重複しています!修正して下さい」OKボタンのみ (9)OKが押されるとUserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) 条件2 textbox2にデーターがある場合Sheets("データー")のサブキー&キー該当全セル列との重複チェック (10)重複の場合はメッセージを表示「キーが重複しています!修正して下さい」OKボタンのみ (11)OKが押されるとUserForm1に入力したデーターを保持したままtextbox3をフォーカスする(できれば背景色と文字色を変える。入力後背景色と文字色は元に戻す) (12)重複が全てなくなったらSheets("データー")の最終行に書き込み (13)UserForm1をブランク状態で表示 以上よろしくお願い致します

専門家に質問してみよう