Page 863 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼検索したデータをテキストボックスに表示 経理課 03/3/10(月) 17:12 ┗Re:検索したデータをテキストボックスに表示 Hirofumi 03/3/10(月) 20:42 ┗Re:検索したデータをテキストボックスに表示 Hirofumi 03/3/10(月) 21:29 ┗Re:検索したデータをテキストボックスに表示 経理課 03/3/11(火) 9:30 ┗この方が速いみたい Hirofumi 03/3/11(火) 20:48 ─────────────────────────────────────── ■題名 : 検索したデータをテキストボックスに表示 ■名前 : 経理課 ■日付 : 03/3/10(月) 17:12 -------------------------------------------------------------------------
名簿シートのA列に社員番号、B列に名前が書いてあります。 USERFORMを使って、TEXTBOX1に社員番号を入力したら TEXTBOX2に自動的に名前が表示されるように するにはどうしたらよいのでしょうか。 |
他にもやり方は有ると思うけど こんなかな? 社員名簿がのシート名を"名簿"とします "名簿"には列見出しが有る物とします 社員コードは数値とします もし、文字列の場合は TextBox1_Exit の strValue = NameSearch(CLng(.Text)) を strValue = NameSearch(CStr(.Text)) で出来ると思います TextBox1に社員コードを入力して、Enter等でフォーカスが移ると TextBox2に名前が入ります 以下コードをUserFormに記述 Option Explicit Private rngSaerch As Range Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim strValue As String With TextBox1 If .Value <> "" Then TextBox2.Text = "" strValue = NameSearch(CLng(.Text)) If strValue <> "" Then TextBox2.Text = strValue Else Cancel = True .Text = "" MsgBox .Text & "の社員番号は有りません" End If End If End With End Sub Private Sub UserForm_Initialize() With Worksheets("名簿") Set rngSaerch = Range(.Cells(2, 1), _ .Cells(65536, 1).End(xlUp)) End With End Sub Private Sub UserForm_Terminate() Set rngSaerch = Nothing End Sub Private Function NameSearch(vntValue As Variant) As String Dim vntFind As Variant vntFind = Application.Match(vntValue, rngSaerch, 0) If Not IsError(vntFind) Then NameSearch = rngSaerch(vntFind, 2).Value End If End Function |
一寸勘違いしてバグが有りましたので修正して下さい TextBox1_Exit の中で以下のように成っていますが .Text = "" MsgBox .Text & "の社員番号は有りません" これを、以下のように入れ替えて下さい MsgBox .Text & "の社員番号は有りません" .Text = "" |
完璧です。 私の考えてたとおりのものを作っていただきありがとうございました。 |
昨日、Testが出来ず確信が持てなかったので、Upするのを止めたのですが もし、名簿の社員コードが昇順に並べられているなら Function NameSearchを以下の様にすると、探索が格段に速くなると思います Private Function NameSearch(vntValue As Variant) As String Dim vntFind As Variant vntFind = Application.Match(vntValue, rngSaerch, 1) If Not IsError(vntFind) Then If vntValue = rngSaerch(vntFind, 1).Value Then NameSearch = rngSaerch(vntFind, 2).Value End If End If End Function |