| 
    
     |  | ▼takeshi さん: こんにちは
 
 >得意先が約50社、製品は何千とあるし、常に得意先も製品も追加されていきます。
 >そうなもんで、力技はちょっと・・・。
 それでは、サンプル、提案を何個か。
 いずれも未検証です。
 
 取り合えず、力技のサンプル。そんなには遅くはないかも?
 これが検索の基本かな?
 Sub t()
 Dim rngdb As Range
 Const shName As String = "製品登録"
 Dim sName As String   '製品名
 Dim Accept As String  '受注
 Dim Customer As String '得意先
 Dim i As Long
 
 '  sName、accept、customerのそれぞれにデータを代入しておく
 'それぞれの関係が判らないので自分で書いてください。
 '  sName = ?
 '  Accept = ?
 '  Customer = ?
 
 Set rngdb = Worksheets(shName).Range("A5").CurrentRegion
 For i = 1 To rngdb.Rows.Count
 If rngdb(i, 1).Value = Name Then        '製品名の比較検証
 If rngdb(i + 1, 1).Value = Customer Then  '顧客
 If rngdb(i, 3).Value = Name Then    '製品名
 '全て一致したのでしたい処理
 End If
 End If
 End If
 Set rngdb = Nothing
 End Sub
 
 サンプル2.findを使ってみた。findは使った事ないのでHelpで煮詰めてね。
 これはそこそこ速いと思います。
 Sub t2()
 Dim rngdb As Range, rngFind As Range
 Const shName As String = "製品登録"
 Dim sName As String   '製品名
 Dim Accept As String  '受注
 Dim Customer As String '得意先
 
 '  sName、accept、customerのそれぞれにデータを代入しておく
 'それぞれの関係が判らないので自分で書いてください。
 '  sName = ?
 '  Accept = ?
 '  Customer = ?
 Set rngdb = Worksheets(shName).Range("A5").CurrentRegion
 Set rngFind = rngdb.Find(sName)
 Do Until rngFind Is Nothing
 If rngFind.Offset(, 1).Value = Accept Then
 If rngFind.Offset(, 2).Value = Customer Then
 '見つかった
 Exit Do
 End If
 End If
 Set rngFind = rngdb.FindNext(rngFind)
 Loop
 
 End Sub
 
 その3
 データが数万件あり、検索条件が複数なら、フィルタオプションをお勧めします。
 これも結構速いです。条件によってはその5と変わらない検索速度を持ちます。
 
 その4
 findよりmatchワークシート関数が速いといわれています。自分では試した事
 はありません。
 
 その5
 データをcsvファイルなど外部ファイルとしておき、ADOで取得する。
 バラツキなしに速いです。但し、経験有りの場合に話。
 
 研究してみて自分にあったのを考えて下さい。
 
 
 |  |