|
▼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で取得する。
バラツキなしに速いです。但し、経験有りの場合に話。
研究してみて自分にあったのを考えて下さい。
|
|