【问题标题】:Compare columns of unequal length for matches and differences比较长度不等的列的匹配和差异
【发布时间】:2011-01-20 12:23:19
【问题描述】:

我将用 Excel 术语解释这一点,这样可能会更清楚。

我有一个 2 列的 Excel 表格。

A 列有 69,000 行。 B 列有 49,000 行。

A 列有我们完整的产品列表 B 列有来自制造商 1 的产品列表

只有某些/某些行在 2 列之间是通用的。而且,B 列不是 A 列的子集。A 列有额外的条目,B 列也有。

我需要知道,B 列中的哪些行与 A 列相同 B 列中的哪些行与 A 列不同

我将如何实现这一目标?我正在尝试 excel 但 vlookup 需要永远挂断。还有其他可以帮助我的 Windows/Office 实用程序吗?如果它是一个宏,你能给我脚本和建议来执行它吗?

我也可以使用 linux 机器,并且我熟悉这些工具。

我可以将此信息传输到文本文件中,我可以运行一些 sed 或 awk 脚本来打印输出吗?

任何帮助都会很棒。

【问题讨论】:

  • 也许将列加载为数据库中的两个表更好...

标签: excel compare


【解决方案1】:

使用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),一列中当前行的值,另一列中的值,并检查您是否得到一个数值(是的,有一个匹配项) , 或不(不匹配)

【讨论】:

    【解决方案2】:

    这在 Unix 或 Linux 上非常简单。首先将您公司的所有产品放在一个文件中,将其他公司的所有产品放在另一个文件中。我将它们称为 FileA 和 FileB。

    对它们进行排序。

    $ 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
    

    【讨论】:

    • 这可能很简单,但它与 OP 的问题有关吗?
    • @El Ronnoco:OP 有 Linux 并且愿意传输文本文件。 OP 想知道哪些产品是两家公司共有的,哪些产品是“制造商 1”独有的。我回答了这两个问题。所以它似乎与我有关。
    【解决方案3】:

    我很惊讶 VLOOKUP 速度慢/不可靠,70'000 行算不了什么。你确定你的公式是正确的吗?

    看到您拥有 Excel,您可能拥有 MS Access。将列加载到 Access 表中并使用 JOIN 进行解析会非常快

    【讨论】:

      【解决方案4】:

      对两个列表进行排序并使用 Approximate Vlookup(最后一个参数为 True):这将非常快(二进制搜索),但您需要处理 NoMatch 情况:C 列中的类似内容
      =IF(B1=Vlookup(B1,$A$1:$A$69000,1,True),"Match","NoMatch")
      并复制下来

      【讨论】:

        猜你喜欢
        • 2020-05-13
        • 1970-01-01
        • 2020-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-24
        • 1970-01-01
        相关资源
        最近更新 更多