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

时间:2016-06-10 21:42:17

标签: string vba excel-vba position excel

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

     A
BJS-LAX-GRU
CAN-ORD-MIA-BOG
NRT-LAX-JFK-LIM

然后我在不同的表格上有一个不同的列表(让我们说" B"),像这样:

 A
LAX
MEX
MIA
JFK

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

     A              B
BJS-LAX-GRU        LAX
CAN-ORD-MIA-BOG    MIA
NRT-LAX-JFK-LIM    LAX

我编写了以下代码,它完美无缺:

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

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

3 个答案:

答案 0 :(得分:6)

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

=MID(C3,SMALL(IFERROR(SEARCH($F$3:$F$6,C3),200),1),3)

使用Ctrl+Shift+Enter

作为数组公式输入

enter image description here

答案 1 :(得分:2)

通过将值放在Arrays中并使用Application.Match来查找匹配,这应该非常快:

'use strict';

let fs = require('fs');
let PDFParser = require("pdf2json");

let pdfParser = new PDFParser();

pdfParser.on("pdfParser_dataError", errData => console.error(errData.parserError) );
pdfParser.on("pdfParser_dataReady", pdfData => {
    fs.writeFile("./node_modules/pdf2json/test/F1040EZ.content.txt", pdfParser.getRawTextContent());
});

pdfParser.loadPDF("./node_modules/pdf2json/test/pdf/fd/form/F1040EZ.pdf");

答案 2 :(得分:1)

您可以通过多次读取值来优化代码,例如

表格(&#34; B&#34;)。单元格(k,1)。值

被多次读取,每次扫描一次读入变量,你也可以使用其他值。

作为替代策略,请查看excel搜索和查找功能