Excel vLookup 返回 0

Excel vLookup Returning 0

我正在处理两个非常大的表,我正在尝试使用 vba 和 vlookups 将一个表中的数据与另一个表进行匹配。

作品sheet各为一栏,结构如下:

引用Sheet:
ID_Ref (2/4)
Q1234
W1234
R1234
...

查找 Sheet
ID_Lookup
Q1234
P1234
X1234
...

我有兴趣识别查找 SHeet 但不在参考 Sheet 中的行。我在每个 sheet 中都有大量行(查找中约 130k,参考中约 90k),并且 excel 在我尝试手动输入公式时一直崩溃。

因此,我正在尝试使用 VBA 来自动化该过程。问题是大多数行的以下函数 returns 0 ,我不知道为什么。

    Sub Vlookup()

    With Sheets("Lookup).Range("B3:B133780")
        .FormulaR1C1 = _
        "=IF(VLOOKUP(RC[-1],2_4!R1C1:R79145C1,1)=RC[-1],VLOOKUP(RC[-1],2_4!R1C1:R79145C2,1,FALSE),VLOOKUP(RC[-1],2_4!R1C1:R79145C2,1,FALSE))"
        .Value = .Value
    End With 
    End Sub

感谢任何帮助!

编辑 5/13:

我尝试了@HarveyFrench 和@Jeeped 提到的方法,得到了两个不同的结果。

正在复制:

=NOT(ISNA(VLOOKUP($A2,'2_4'!$A:$A145,1, FALSE)))

与向下复制相比,产生的不匹配记录数量不同

=IFERROR(MATCH(A2,'2_4'!$A:$A145,0),"")

我是不是做错了什么?

这是 yoru 公式,它看起来很狡猾!

'=IF(VLOOKUP(RC[-1],2_4!R1C1:R79145C1,1)=RC[-1]
    ,VLOOKUP(RC[-1],2_4!R1C1:R79145C2,1,FALSE)
    ,VLOOKUP(RC[-1],2_4!R1C1:R79145C2,1,FALSE))

在具有值的查找列右侧的列中的单元格中(我假设是 A 列并从第 2 行开始。在单元格 B2 中尝试使用此公式,然后复制并粘贴它:

=NOT(  ISNA(   VLOOKUP($A2,'2_4'!$A:$A145,1, FALSE)   )   )

这将 return 找到值时为真,否则为假。

我认为您需要重新阅读 VLOOKUP 的手册页,因为您没有正确使用它。

您可能希望在编辑时使用功能区>>公式选项卡>>计算选项来关闭自动计算,但我认为没有必要。

哈维

A MATCH function is more efficient than a VLOOKUP function or even a COUNTIF function 如果你只想证明存在。

With Sheets("Lookup).Range("B3:B133780")
    .Formula = "=iferror(match(a3, '2_4'!A:A, 0), """")"
    .cells = .value2
End With 

您将留下空白单元格和包含工作表“2_4”B 列中匹配行号的单元格。

这是一种使用 ADO 的不同方法(改编自 this answer,但已修改为使用 Excel 2007 年以后的连接字符串,并仅识别查找所特有的项目 sheet .) 我假设查找 sheet 被称为 "Lookup",引用 sheet 被称为 "Reference" 并且我们识别的项目列表将输出到 sheet 称为 "Data" - 如果这些是错误的,请替换为正确的名称。

在 VBA 编辑器中,转到工具 > 引用并添加对 "Microsoft ActiveX Data Objects 2.8 Library" 的引用。现在将其添加到标准代码模块,然后 运行 它:

Option Explicit

Sub get_employees()

Dim cn As ADODB.Connection
Set cn = New ADODB.Connection

' Connection string for .xlsm files
With cn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
        "Extended Properties=""Excel 12.0 Macro;IMEX=1;HDR=Yes"";"
    .Open
End With

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open "SELECT [Lookup$].[ID_Lookup] FROM [Lookup$] LEFT JOIN [Reference$] ON [Lookup$].[ID_Lookup] = " & _
    "[Reference$].[ID_Ref] WHERE [Reference$].[ID_Ref] IS NULL", cn

With Worksheets("Data")
    .Cells(2, 1).CopyFromRecordset rs
End With

rs.Close
cn.Close

End Sub

这会尝试将查找 sheet 中的每个条目与参考 sheet 中的一个或多个对应条目进行匹配。然后它会消除所有匹配项,只保留不匹配的查找条目。