如果您想知道如何比较具有两百万行的数据的2列数据并提取这两个列之间的唯一值,那么您应该阅读本文。我们将使用VBA代码比较两列数据并在接下来的两列中显示差异。

问题:A和B列中存在多个值。我希望宏检查两个列中超过40 k的数据行,然后从每个列中提取唯一项的列表到下一列,即C和D列。在此示例中,我仅获取40行样本数据。

您可以找到原始问题http://www.excelforum.com/excel-programming-vba-macros/1094194-compare-data-in-columns-a-and-b-show-differences-in-columns-c-and -d.html [此处]

以下是数据的快照:

img1

===

要比较两列的列表,我们需要按照以下步骤启动VB编辑器:

单击“开发人员”选项卡。从“代码”组中选择“ Visual Basic”

img2

  • 将以下代码复制到标准模块中

Sub PullUniques()

Dim rngCell As Range

For Each rngCell In Range("A2:A40")

If WorksheetFunction.CountIf(Range("B2:B40"), rngCell) = 0 Then

Range("C" & Rows.Count).End(xlUp).Offset(1) = rngCell

End If

Next

For Each rngCell In Range("B2:B40")

If WorksheetFunction.CountIf(Range("A2:A40"), rngCell) = 0 Then

Range("D" & Rows.Count).End(xlUp).Offset(1) = rngCell

End If

Next

End Sub

img3

  • 上面的宏全部设置为可以运行;我们可以按F5键–如果您当前处于Visual Basic编辑器屏幕中–或者我们可以使用快捷键“ ALT + F8”,选择您的宏并单击运行按钮

img4

  • A和B列的唯一列表将在C和D列中自动生成

img5

代码说明:

在上面的代码中,我们将使用IF函数和For循环来获取结果。

我们将Dim rngCell声明为Range;将rngCell声明为Range的目的是我们要为采样范围“ A2:A40”分配一个特定的名称,即在我们的示例中,对于Range((A2:A40“)中的每个rngCell;我们将使用条件If WorksheetFunction.CountIf(Range(“ B2:B40”),rngCell)= 0来检查“ rngCell”中的每个单元格。此行代码使用COUNTIF VBA函数检查标准范围r2Cell等于零的标准范围B2:B40,然后在列C中保存存储在rngCell中的值类似地,我们将对列B运行For Each循环并提取D列中的唯一值结论:我们可以从每个列中获得唯一的文本或值列表; C列(结果-存在于列表1中,但不在列表2中)和D列(结果-存在于列表2中,但不在列表1中)的标题名称。如果我们有相似的要求,但列数多于两列,则需要调整代码以获取结果。

image 29

如果您喜欢我们的博客,请在Facebook上与您的朋友分享。您也可以在Twitter和Facebook上关注我们。

我们希望收到您的来信,请让我们知道我们如何改进,补充或创新我们的工作,并为您做得更好。写信给[email protected]_