将单个字段的数据与表中的所有字段进行比较

时间:2015-09-23 11:42:15

标签: excel vba excel-vba

我在Excel中有如下所示的数据,这里我正在寻找重复识别或批量种类。

enter image description here

如何识别此类数据(以VB宏或其他方式)?

2 个答案:

答案 0 :(得分:-1)

这里有一些代码可能能够做你想要的。请注意代码是区分大小写的。希望有所帮助:)

Sub testDuplicate()
lastrow = WorksheetFunction.CountA(Range("A:A"))
For j = 1 To lastrow
    For i = 1 To lastrow
        If j = i Then
            'Do nothing
        ElseIf Cells(i, 1) = Cells(j, 1) Then
          Cells(j, 2).Value = "Duplicate"
          Exit For
        Else
          Cells(j, 2) = "Unique"
     End If
    Next i
Next j
End Sub

答案 1 :(得分:-1)

您将首先想要清理数据。例如,加拿大专业委员会有两种拼写方式。您可能希望尝试创建一个新列,该列是帐户名的前2个或3个字,并使用upcaselowcase函数使其不区分大小写。然后,您可以轻松地从新列中找到重复项。

自从您标记SAS以来,这里有一个可能的基于SAS的解决方案:

第1步:为每个帐户名称获取前2个字,并使其不区分大小写

data have2;
     length Account_Name2 $20.;
     set have;

     word_length = countw(Account_Name);
     if(word_length > 2) then Account_Name2 = upcase(catx(' ', scan(Account_Name, 1), scan(Account_Name, 2) ) );
         else Account_Name2 = upcase(Account_Name);

     drop word_length;
run;

第2步:按account_name2对数据进行排序,并将重复项保存到新数据集

proc sort data=have2
          out=_TMP_
          nodupkey
          dupout=dupes;
     by account_name2;
run;

请注意,_TMP_数据集只是为了防止覆盖have2表。

步骤3:dupouthave2合并到已清理的表account_name2中,然后标记重复项

proc sort data=have2;
     by account_name2;
run;

data want;
     merge have2
           dupes(in=duprecs keep=account_name2);
     by account_name2;

     Dupe_Flag = (duprecs);

     drop account_name2;
run;

我希望这有帮助!