Excel 中多列代码表查找

 

例题描述

Excel文件book1.xlsx中有下图所示的数据。

..

现在要用左边表格中每行的A,B,C的值对应右边表格的M,N,O的值去查找,然后返回此行的House值填在左边表的E列中,结果如下图所示:

..

 此题涉及读取Excel文件指定区域数据以及在序表中根据关键字段的值查找记录并返回记录的其他字段值。本例中左边表格仅有3行,实际应用中左边表格可能会有很多行,本文介绍的方法都适用。

 

实现步骤

1、  编写脚本:


A

1

=file(arg1).xlsimport@t(Name,A,B,C;,3:6)

2

=file(arg1).xlsimport@t(House,M,N,O;,3:11).keys(M,N,O)

3

=A1.(A2.find([A,B,C]).House)

4

return A3

arg1是脚本文件的参数,运行时传入Excel数据文件的全路径。

A1   Excel文件里读取数据,读第3行到第6行中的Name,A,B,C4列数据,选项@t表示首行是列标题

A2   Excel文件里读取数据,读第3行到第11行中的House,M,N,O4列数据,选项@t表示首行是列标题,然后指定M,N,O为关键字段

A3   循环A1的每一行,用A,B,C的值对应A2的关键字段值去查找对应的行,返回此行的House

A4   返回A3中的查找结果给调用此脚本的程序(比如VBA)使用

 

2、将脚本保存为lookupCols.dfx文件,然后在Excel文件中,通过alt+F11进入VBA编辑界面,编写脚本函数,调用esproc()函数运行dfx脚本,将结果集的内容填写在E列即可,其中填数的起始单元格E4对应的位置nStart=4, nEnd=5,vba 脚本如下:

 

Sub button_Click()

    nStart = 4

    nEnd = 5

    file = Application.ActiveWorkbook.FullName

    ret = Application.Run("esproc","D:/works/shell/excel/data/lookupCols", file)

    r = UBound(ret, 1)

    c = UBound(ret, 2)

    nStart2 = nStart + r - 1

    nEnd2 = nEnd + c - 1

    Range(Cells(nStart, nEnd), Cells(nStart2, nEnd2)) = ret

End Sub 

 

 

问答搜集  https://stackoverflow.com/questions/63912811/how-to-lookup-an-multiple-datas-and-return-respective-data-from-the-lookup-locat

 

【附件】 lookupcols.zip