|    | 
     前述のように、テキストボックスのChangeイベントは 
1文字入力されるたびに発生しますから、入力途中の 
支店コードをキー入力があるたびにチェックしても 
重複チェックはできないです。 
そこで、提案なのですが、 
UserForm1の支店コードを入力するTextBox1 を  
ComboBoxコントロールに置き換えてみてはいかがでしょうか? 
そうすると、ユーザーは ComboBox1から既存リストの一覧を 
選択するだけで、コードと対応する支店名をTextBox2 に 
表示することができます。いちいちコードをタイプする必要 
はなくなりますし、コードがどの支店名のものであるかを 
ビジブルに確認できます。 
また、こうすると、 
UserForm1の[新規登録]ボタンを押して、UserForm2 を表示して 
新規コードと支店名を登録するときも、UserForm1のComboBox1 
が使っているセル範囲をすぐ参照して、すでに既存のコードが 
がないかチェックするのも容易になります。 
 
'----------------------------------------------- UserForm1 
Option Explicit 
Private Sub UserForm_Initialize() 
 Call Update支店コード表 
End Sub 
 
Sub Update支店コード表() 'UserForm1とUserForm2 から呼ばれるプロシージャ 
 Dim rg As Range 
 With Worksheets("Sheet1") 
   Set rg = .Range("A2", .Cells(Rows.Count, 1).End(xlUp)).Resize(, 2) 
 End With 
 With ComboBox1 
   .ColumnCount = 2 
   .ColumnWidths = "40;50" 
   .ColumnHeads = True 
   .RowSource = rg.Address(External:=True) 
 End With 
End Sub 
 
Private Sub ComboBox1_Change() 
  Dim i As Long 
  i = ComboBox1.ListIndex 
  If i < 0 Then Exit Sub 
  TextBox2.Text = ComboBox1.List(i, 1) 
  TextBox3.Text = "" 
End Sub 
 
Private Sub btn新規_Click() 
 UserForm2.Show 0 
End Sub 
 
'----------------------------------------------- UserForm2 
Option Explicit 
 
Private Sub btn新規登録_Click() 
  Dim sCode As String 
  Dim sName As String 
  Dim rg As Range 
  Dim m 
   
  sCode = TextBox1.Text 
  sName = TextBox2.Text 
  If Len(sCode) < 2 Then Exit Sub 
  If Len(sName) < 1 Then Exit Sub 
   
  Set rg = Excel.Range(UserForm1.ComboBox1.RowSource) 
  m = Application.Match(sCode, rg.Columns(1), 0) 
  If IsNumeric(m) Then 
    MsgBox rg.Item(m, 1) & vbTab & rg.Item(m, 2) & vbCr _ 
    & "は すでに登録されています" 
  Else 
    '---- 新規支店セット 
    With rg 
      .Item(rg.Rows.Count + 1, 1).Value = sCode 
      .Item(rg.Rows.Count + 1, 2).Value = sName 
    End With 
    UserForm1.Update支店コード表 
  End If 
End Sub 
 | 
     
    
   |