比较两列中的字符串是否有差异

时间:2019-10-02 18:41:37

标签: excel

我正在尝试比较两列字符串的差异。

actual data

我有这两个状态列表,需要提取差异。我需要查看列F是否缺少列G中的任何内容。有没有一种方法可以在不运行宏的情况下进行表述?谢谢大家!

4 个答案:

答案 0 :(得分:0)

您可以使用VLOOKUP函数来确定另一组中缺少哪些字符串。

假设您的数据从第2行开始,请输入以下内容:

=VLOOKUP(G2, [ highlight all the data in column F and lock it], 1, 0)

出现任何#N/A表示该数据不在另一个数据集中。

答案 1 :(得分:0)

您可以使用高级查询进行操作。 请参阅此article,以了解如何在您的Excel版本上使用 Power Query 。它在 Excel 2010 Professional Plus和更高版本中可用。我的演示使用的是 Excel 2016

步骤是:

  1. 使用来自表功能将源表添加到超级查询编辑器,删除所有不相关的列,仅保留Column FColumn G 。以下是我正在使用的一个小示例;

Sample Table

  1. 右键单击Column G的标题,以使重复的列成为G列;

Duplication

  1. 使用Transform标签下的拆分列功能,以逗号,拆分G列,并确保将输出设置为放入

Split Column

  1. Add Column标签下使用以下公式添加自定义列=Text.PositionOf([Col_F],[Col_G])>=0,然后应显示以下内容:

Custom Column

  1. 单击列标题右侧的过滤器按钮以过滤 Custom column以仅显示FALSE结果;

  2. 使用Transform标签下的 Merge Columns (合并列)功能将Column FColumn G - Copy以分号;作为分隔符进行合并。那你应该有:

Merged

  1. 使用分组依据功能通过合并列对Column G进行以下设置。完成后,您会注意到Sum列显示预期的错误。

Group By

  1. 转到公式栏,并用以下内容之一替换公式:= Table.Group(#"Merged Columns", {"Merged"}, {{"Sum", each Text.Combine([Col_G],","), type text}}),然后应该具有以下内容:

Text Combine

  1. 然后,您可以用分号;拆分合并的列,以检索原始的Column FColumn G

Splited

  1. 重命名每个列,然后将输出关闭并加载到新的工作表(默认情况下)。然后,您应该具有以下内容:

Outcome

  

如果不需要在输出表中显示Column G,可以简化上述步骤。您可以跳过第2步,第6步和第9步。棘手的是第8步,您无需创建新步骤,而是更改上一步中使用的公式。关键是用公式中的List.Sum函数替换原来的Text.Combine函数,以获得所需的输出。

这是后台的超级查询 M代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table11"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Col_F", type text}, {"Col_G", type text}}),
    #"Duplicated Column" = Table.DuplicateColumn(#"Changed Type", "Col_G", "Col_G - Copy"),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Duplicated Column", {{"Col_G", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Col_G"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Col_G", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each Text.PositionOf([Col_F],[Col_G])>=0),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = false)),
    #"Merged Columns" = Table.CombineColumns(#"Filtered Rows",{"Col_F", "Col_G - Copy"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged"),
    #"Grouped Rows" = Table.Group(#"Merged Columns", {"Merged"}, {{"Sum", each Text.Combine([Col_G],","), type text}}),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Grouped Rows", "Merged", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Merged.1", "Merged.2"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Merged.1", type text}, {"Merged.2", type text}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type2",{{"Merged.1", "Col_F"}, {"Merged.2", "Col_G"}, {"Sum", "Col_Missing"}})
in
    #"Renamed Columns"

如果您有任何疑问,请告诉我。干杯:)

答案 2 :(得分:0)

此外,要具体查看缺少的数据,可以使用以下公式:

= IF(ISNUMBER(SEARCH(MID(TRIM(F1),1,2),TRIM(G1),1)),“”,MID(TRIM(F1),1,2))&“,” &IF(ISNUMBER(SEARCH(MID(TRIM(F1),4,2),TRIM(G1),1)),“”,MID(TRIM(F1),4,2))&“,”&“(&IF(ISNUMBER( SEARCH(MID(TRIM(F1),7,2),TRIM(G1),1)),“”,MID(TRIM(F1),7,2))&“,”&IF(ISNUMBER(SEARCH(MID( TRIM(F1),10,2),TRIM(G1),1)),“”,MID(TRIM(F1),10,2))&“,”&IF(ISNUMBER(SEARCH(MID(TRIM(F1)) ,13,2),TRIM(G1),1)),“”,MID(TRIM(F1),13,2))&“,”&IF(ISNUMBER(SEARCH(MARCH(MID(TRIM(F1),16,2) ),TRIM(G1),1)),“”,MID(TRIM(F1),16,2))&“,”&IF(ISNUMBER(SEARCH(MID(F1,19,2),TRIM(G1), 1)),“”,MID(F1,19,2))

答案 3 :(得分:0)

我最近尝试过的一点是:

=IF(B2=“TX”,REPLACE(F2,SEARCH(“CO,”,F2)3,””))

这将在F2的字符串中找到“ CO”,并将其拉出,剩下“ AR,FL,KY,LA,NJ,NM,OK,TX”,

可能不是最优雅的方法,但是。 。 。我该如何扩展它以便也从F2中拉出“ TX”,“ AR”,“ LA”等(G2中的其余字符串)?

我正在寻找G2中是否缺少F2。因此,在这种情况下,我的最终结果应该是空白单元格。