Excel 索引一个库,然后在库中搜索一个词,并记录所有可能的匹配项

Excel 索引一个库,然后在库中搜索一个词,并记录所有可能的匹配项,excel,vba,function,ms-access,Excel,Vba,Function,Ms Access,我有一个大约400000条记录的数据库,我想把这些记录的索引结果搜索到另一列,以检查它是否存在。我希望它记录,即使只有部分字符串存在。我有一个在Excel中尝试过的例子。以2.8ghz的速度处理4个核的100000条记录(4小时)需要很长时间。我想在MS Access中这样做会更快。在MS Access中可以更快地完成此操作吗?我会把代码贴在这里 =INDEX($A:$A,AGGREGATE(15,7,ROW($A:$A)/(ISNUMBER(SEARCH($C2,$A:$A))),COLUMN

我有一个大约400000条记录的数据库,我想把这些记录的索引结果搜索到另一列,以检查它是否存在。我希望它记录,即使只有部分字符串存在。我有一个在Excel中尝试过的例子。以2.8ghz的速度处理4个核的100000条记录(4小时)需要很长时间。我想在MS Access中这样做会更快。在MS Access中可以更快地完成此操作吗?我会把代码贴在这里

=INDEX($A:$A,AGGREGATE(15,7,ROW($A:$A)/(ISNUMBER(SEARCH($C2,$A:$A))),COLUMN(A:A)))


在MS Access中,是否有使用VBA代码或查询来执行此操作的方法

是的,这是可以做到的,尽管我不确定它会更快。有一个库字符串表和另一个数据库字符串表

使用查询的选项要求每个表中都有一个唯一的标识符字段。文本字符串可能用于此目的,但我推荐一个数字。如果尚未在每个表中添加自动编号字段

考虑:

查询1:LibDB

SELECT [DB_ID]+[LIB_ID] AS ID, DB.WordDB, Lib.WordLib 
FROM Lib, DB
WHERE (((InStr([WordLib],[WordDB]))>0))
ORDER BY DB.WordDB, Lib.WordLib;
问题2

TRANSFORM First(LibDB.WordLib) AS FirstOfWordLib
SELECT LibDB.WordDB
FROM LibDB
GROUP BY LibDB.WordDB
PIVOT DCount("*","LibDB","WordDB='" & [WordDB] & "' AND ID<" & [ID])+1;

请编辑您的问题并添加有关您的数据库、您尝试过的内容和预期结果的更多信息。
Sub StringMatch()
Dim rsDB As DAO.Recordset, rsLIB As DAO.Recordset, rsRST As DAO.Recordset, n As Integer
Set rsDB = CurrentDb.OpenRecordset("SELECT WordDB FROM DB ORDER BY WordDB")
Set rsRST = CurrentDb.OpenRecordset("SELECT * FROM Result WHERE 1=1")
n = 1
CurrentDb.Execute "DELETE FROM Result"
Do While Not rsDB.EOF
    rsRST.AddNew
    Set rsLIB = CurrentDb.OpenRecordset("SELECT WordLib FROM Lib " & _
                "WHERE InStr([WordLib],'" & rsDB!WordDB & "') > 0 ORDER BY WordLib;")
    rsRST!WordDB = rsDB!WordDB
    Do While Not rsLIB.EOF And n < 255
        rsRST("F" & n) = rsLIB!WordLib
        n = n + 1
        rsLIB.MoveNext
        If rsLIB.EOF Then
            rsRST.Update
            n = 1
        End If
    Loop
    rsLIB.Close
    rsDB.MoveNext
Loop
End Sub
Dim rsLIB As New ADODB.Recordset, rsDB As New ADODB.Recordset, c As Integer, r As Integer
Dim cnx As New ADODB.Connection
'setup the connection
'[HDR=Yes] means the Field names are in the first row
cnx.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
         "Data Source='" & ThisWorkbook.FullName & "';" & _
         "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"
rsDB.Open "SELECT Database FROM [Sheet1$] WHERE NOT Database Is Null", _
     cnx, adOpenDynamic, adLockOptimistic
c = 3
r = 2
Do While Not rsDB.EOF
    rsLIB.Open "SELECT Library FROM [Sheet1$] " & _
               "WHERE InStr([Library],'" & rsDB!Database & "')>0 ORDER BY Library", _
          cnx, adOpenDynamic, adLockOptimistic
    Do While Not rsLIB.EOF
        Worksheets("Sheet1").Cells(r, c).Value = rsLIB!Library
        rsLIB.MoveNext
        c = c + 1
    Loop
    c = 3
    rsLIB.Close
    r = r + 1
    rsDB.MoveNext
Loop