過去ログ

                                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に自動的に名前が表示されるように
するにはどうしたらよいのでしょうか。
 ───────────────────────────────────────  ■題名 : Re:検索したデータをテキストボックスに表示  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 03/3/10(月) 20:42  -------------------------------------------------------------------------
   他にもやり方は有ると思うけど
こんなかな?
社員名簿がのシート名を"名簿"とします
"名簿"には列見出しが有る物とします
社員コードは数値とします
もし、文字列の場合は 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
 ───────────────────────────────────────  ■題名 : Re:検索したデータをテキストボックスに表示  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 03/3/10(月) 21:29  -------------------------------------------------------------------------
   一寸勘違いしてバグが有りましたので修正して下さい
TextBox1_Exit の中で以下のように成っていますが

        .Text = ""
        MsgBox .Text & "の社員番号は有りません"

これを、以下のように入れ替えて下さい

        MsgBox .Text & "の社員番号は有りません"
        .Text = ""
 ───────────────────────────────────────  ■題名 : Re:検索したデータをテキストボックスに表示  ■名前 : 経理課  ■日付 : 03/3/11(火) 9:30  -------------------------------------------------------------------------
   完璧です。
私の考えてたとおりのものを作っていただきありがとうございました。
 ───────────────────────────────────────  ■題名 : この方が速いみたい  ■名前 : Hirofumi <hirofumi@venus.dti.ne.jp>  ■日付 : 03/3/11(火) 20:48  -------------------------------------------------------------------------
   昨日、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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 863