Access 2010でVBA関数を作成して、あるテーブルの用語のリストを別のテーブルの用語のリストと比較しました。値が類似している場合(必ずしも完全に一致しているとは限りません)、一致するたびに2番目のテーブルの列の値を合計します。TableAには約150の用語があります。TableBには、関連するカウント(整数)を持つ約50,000の用語があります。
表の例:
TableA TableB
--------- ----------
ID ID
Term Term
Count
VBA関数を呼び出して用語を比較し、あいまい一致がある場合はカウントを合計する単純なSQLクエリがあります。
SQL:
SELECT TableA.[Term], TermCheck(TableA.[Term]) AS [Term Count] FROM TableA ORDER BY 2 DESC;
VBA:
Option Compare Database
Public Function TermCheck(Term) As Long
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("TableB", dbOpenDynaset)
Dim ttl As Long
ttl = 0
With rst
While Not .EOF
If rst(1) Like "*" & Term & "*" Then
ttl = ttl + rst(2)
End If
.MoveNext
Wend
End With
rst.Close
Set rst = Nothing
CurrentDb.Close
TermCheck = ttl
End Function
私が抱えている問題は、CPUの約50%を使用していることであり、可能な限り軽量化したいと考えています。Accessを使用してこのタスクを実行するためのより効率的な方法はありますか?純粋にSQLの代替手段に移行することは、現時点ではオプションではありませんが、私は幸せになります。私はAccessやVBAの第一人者ではありませんが、パフォーマンスを向上させる明らかな何かがクエリに欠けていると感じています。
編集:
期待される結果は、あいまい一致が発生したTableBのカウント列の合計を含むTableAのすべての用語を一覧表示します。
データ例:
TableA
-------------
1 blah
2 foo
3 bar
4 zooba
TableB
-------------
1 blah 16
2 blah2 9
3 foo 7
4 food 3
5 bar 3
結果の例:
Term Count
---------------------
blah 25
foo 10
bar 3
zooba 0