比较匹配和不同长度的列的长度
我将以excel的forms解释这个问题,所以可能会更清楚。
我有一个2列的Excel表。
A列有69,000行。 B列有49,000行。
列A有我们完整的产品列表列B有制造商1的产品列表
在两列之间只有一些/一些共同的行。 而且列B不是列A的子集。列A具有额外的条目,列B也具有额外的条目。
我需要知道,列B中的哪些行与列A是相同的,列B中的行与列A不共同
我将如何实现这一目标? 我正在尝试擅长,但这种方法是永久挂断的。 有没有其他的Windows / Office工具可以帮助我? 如果它的macros,请给我脚本和build议来执行它?
我也可以访问linux机器,我熟悉这些工具。
我可以将这个信息传输到一个文本文件/ s,我可以运行一些sed或awk脚本打印输出?
任何帮助将是伟大的。
这在Unix或Linux上很简单。 首先将所有公司的产品放在一个文件中,将所有其他公司的产品放在另一个文件中。 我会称它们为FileA和FileB。
sorting他们。
$ sort -u FileA > temp_file $ mv temp_file FileA $ sort -u FileB > temp_file $ mv temp_file FileB
这两个文件通用的产品。 。 。
$ comm -12 FileA FileB
FileB独有的产品。 。 。
$ comm -13 FileA FileB
我很惊讶VLOOKUP是慢/不可靠的,70'000行不算什么。 你确定你的公式是正确的?
看到你有Excel,你可能有MS Access。 将列加载到Access表中并使用JOINparsing将非常快速
使用MATCH()
函数,如果有结果,会给你一个数字,如果没有,则会给#NA。
我总是在Excel 2007和更新的表格中工作,但是会提供两种语法:
假设你有一个表,在列“column1”和“column2”中要比较的东西,检查Column2中的值是否存在于Column1中
=ISNUMBER(MATCH(Table1[[#This Row],[Column2]],[Column1],0))
或者如果你有一个老式的数组在A和B列中的数据,在A中查找B中的值:
=ISNUMBER(MATCH(Sheet1!$B2,Sheet1!$A$2:$A$11,0))
发生了什么事情 – 您正在寻找一列中当前行的值与另一列中的值完全匹配(0参数),并检查您是否获得数值(是的,匹配),或不(不匹配)
对这两个列表进行sorting,并使用近似Vlookup(最后一个参数为True):这将是非常快的(二进制search),但你需要处理NoMatch的情况:类似于C列
=IF(B1=Vlookup(B1,$A$1:$A$69000,1,True),"Match","NoMatch")
并抄下来