我在表格的列中有一个字符串列表(让我们说" 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 +行。有没有更有效的方法来做到这一点?
答案 0 :(得分:6)
如果单个值都是3个字母,那么类似于:
=MID(C3,SMALL(IFERROR(SEARCH($F$3:$F$6,C3),200),1),3)
使用Ctrl+Shift+Enter
答案 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搜索和查找功能