【问题标题】:Comparing Data Between Excel Sheets比较 Excel 工作表之间的数据
【发布时间】:2013-01-09 21:15:46
【问题描述】:

我有 2 个来自同一个数据源的提取,都导入到了 excel 中。我需要比较数据以查看是否有任何不同,并突出显示/显示那些不同的数据。我不知道我是否可以使用 vLookup,因为这似乎仅限于您正在查找的最左侧列。

前两列创建了一个虚拟复合键,因此我可以识别一个匹配项,然后使用匹配函数来显示每个行组合是否匹配。

现在我需要说明是否存在匹配项,然后比较该匹配项的工作表之间的所有其他数据。我需要交叉检查大约 15 列左右的其他数据,这就是我遇到的问题。我以为我可以只使用简单的 IF 语句,IF=match 然后检查列 D = 列 D,但我认为我仍然需要索引引用或匹配值的引用来与其他值进行比较。

什么可能是最好的解决方案。如果需要,我愿意重写整个事情,如果这有助于使整个事情更容易/更清洁地实施?

【问题讨论】:

  • 您能否展示一些来自每张工作表的示例数据以及您希望如何匹配?听起来您想搜索整张纸;在这种情况下,VLOOKUP 将是一个不错的选择。
  • 如果你能明确你的目标,这也会很有用。您是否要查看所有列是否相同?如果前两列结果匹配,您是否需要对其他列中找到的值执行一些操作?

标签: excel match vlookup


【解决方案1】:

我同意 cmets - 一些示例数据将有助于更准确地指定您希望如何标记行以进行检查。

但是一般来说,如果每个 excel 工作表的布局都相同,我建议通过比较 excel 数据

  1. 将每个工作表中的数据堆叠在一起
  2. 添加新列“Source”以标识数据的工作表源,并为每条记录添加一个等于 1 的 CNT 列。
  3. 在新数据上使用数据透视表并排比较
    • 在数据透视表中使用“来源”作为“列标签”
    • 使用“键”作为数据透视表中的第一个“行标签”
    • 将您要比较的任何其他值添加到“行标签”部分
    • 使用 CNT 作为“值”
  4. 数据透视表中总 CNT 不为 2 的任何行都表示两个表之间存在差异。

这将允许您识别任何差异,以及仅出现在单个工作表中的那些行,简单的 VLOOKUP 会遗漏这些行。查看example here。 Example1 是一个基本案例,Example2 展示了一个更具扩展性的解决方案,可以处理任意数量的不同源表和列。

这是一些示例数据,在您的情况下,KEY 将是标识您的记录的两列的串联:

- - - Worksheet MyOldData - - - - - - - 
Key      Name        Income
A        Aunders     111111
B        Blake       222222
C        Conan       333333
D        Ders        444444

- - - Worksheet MyNewData - - - - - - - 
Key      Name        Income
A        Anders      111111 <-- Diff Name
B        Blake       200000 <-- Diff Income
C        Conan       333333

会导致 -->

- - -Worksheet ReadyToCompare - - - - - - - 
Key      Name        Income  Source  Cnt
A        Anders      111111  New     1
B        Blake       200000  New     1
C        Conan       333333  New     1
A        Aunders     111111  Old     1
B        Blake       222222  Old     1
C        Conan       333333  Old     1
D        Ders        333333  Old     1

新的、可爱的、数据友好的“ReadyToCompare”表可以用作数据透视表的来源。

【讨论】:

  • 嗯,与我交谈过的大多数人都说使用 vlookup 很简单,但我看不出如何使用多列数据来做到这一点。似乎我需要为每一行创建一个标识符(两个前列组合),然后连接来自其他列的数据并进行比较。我将 AB 两列合并以创建唯一 ID,然后进行匹配,但这无助于我到达我要去的地方,因为它只告诉我我正在检查的值是否在数组中。 =ISNA(MATCH(U2,Sheet1!$U$2:$U$32144,0)) 我可以引用数组中匹配的任何值吗?
  • 谨慎使用 Vlookup 进行比较,除非您知道您的表具有完全相同的标识符。在上面的示例数据中,如果您使用 NEW 数据作为基础进行 VLOOKUP,您将不会知道旧表中的“D”条目。上面的方法确实可以扩展到任意数量的列。我将更新示例链接以显示更大的演示。
  • 最终使用 VBA 来执行此操作,因为我发现基于 excel 的函数最终会变得有点笨拙。但感谢您的帮助和建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
相关资源
最近更新 更多