我在 Access 2010 中创建了一个 VBA 函数,用于将一个表中的术语列表与另一个表中的术语列表进行比较。如果这些值是相似的(不一定是完全匹配),我会从第二个表中的列中为每个匹配项求和。表 A 有大约 150 个术语。TableB 有大约 50,000 个具有相关计数(整数)的术语。
示例表:
TableA TableB
--------- ----------
ID ID
Term Term
Count
我有一个简单的 SQL 查询,它调用 VBA 函数来比较术语,如果它们有模糊匹配,则对计数求和。
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
我遇到的问题是它使用了我大约 50% 的 CPU,我想让它尽可能轻量级。是否有更有效的方法来使用 Access 完成此任务?在这一点上,转向纯粹的 SQL 替代方案不是一种选择,尽管它会让我更开心。我不是 Access 或 VBA 专家,但我觉得我在查询中遗漏了一些可以提高性能的明显内容。
编辑:
预期的结果将列出 TableA 中的所有术语以及发生模糊匹配的 TableB 中的计数列的总和。
示例数据:
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