确定列表中哪个值首先出现在字符串中的最快方法

N. *_*von 0 string excel vba position excel-vba

我在工作表的列中有一个字符串列表(让我们说"A"),如下所示:

     A
BJS-LAX-GRU
CAN-ORD-MIA-BOG
NRT-LAX-JFK-LIM
Run Code Online (Sandbox Code Playgroud)

然后我在另一张表上有一个不同的列表(让我们说"B"),如下所示:

 A
LAX
MEX
MIA
JFK
Run Code Online (Sandbox Code Playgroud)

所以我想知道第一个列表的每个字符串中第一个列表的哪个值首先出现,然后我需要在字符串旁边写入该值.在这个例子中,我会得到:

     A              B
BJS-LAX-GRU        LAX
CAN-ORD-MIA-BOG    MIA
NRT-LAX-JFK-LIM    LAX
Run Code Online (Sandbox Code Playgroud)

我编写了以下代码,它完美地运行:

Dim aux As Integer
Dim cur As String

For j = 1 To Sheets("A").Cells(Rows.Count, "A").End(xlUp).Row
    aux = 100
    cur = ""
    For k = 1 To Sheets("B").Cells(Rows.Count, "A").End(xlUp).Row
        If InStr(Sheets("A").Cells(j, 1).Value, Sheets("B").Cells(k, 1).Value) < aux And InStr(Sheets("A").Cells(j, 1).Value, Sheets("B").Cells(k, 1).Value) <> 0 Then
            cur = Sheets("B").Cells(k, 1).Value
            aux = InStr(Sheets("A").Cells(j, 1).Value, cur)
        End If
    Next k
    Sheets("A").Cells(j, 2) = cur
Next j
Run Code Online (Sandbox Code Playgroud)

问题是我知道这个代码效率非常低,因为这些代码有200K +行.有没有更有效的方法来做到这一点?

Tim*_*ams 6

如果单个值都是3个字母,那么类似于:

=MID(C3,SMALL(IFERROR(SEARCH($F$3:$F$6,C3),200),1),3)
Run Code Online (Sandbox Code Playgroud)

使用输入为数组公式 Ctrl+Shift+Enter

在此输入图像描述