根据另一列

时间:2018-01-25 10:11:19

标签: excel vba excel-vba

假设我有一个表格如下:

**A**         **B** 
2018-01-25    Red
2018-01-25    Black
2018-01-25    Black
2018-01-24    Blue
2018-01-24    Blue
2018-01-24    Red

现在我想根据A的唯一值显示B的唯一值。 我希望C和D列像:

**C  D**
2018-01-25  Red
2018-01-25  Black
2018-01-24  Blue
2018-01-24  Red

请帮我在Excel宏中编写VBA脚本来解决这种情况。我使用了公式:"=IF(SUMPRODUCT(($A$2:A2=A2)*($B$2:B2=B2))>1,0,1)"但计算50k记录需要大约15-20分钟。

我想特别使用xls格式,不能使用xlsm或xlsx,它们在数据透视表中提供了不同的计数。

2 个答案:

答案 0 :(得分:1)

您可以使用Excel的删除重复项功能

Option Explicit

Public Sub CopyAndRemoveDuplicates()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1") 'specify your sheet name

    ws.Range("A:B").Copy ws.Range("C:D") 'copy colums A:B to C:D
    ws.Range("C:D").RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo
       'remove duplicates from C:D
End Sub

如果第一行中有标题,请不要忘记将Header:=xlNo更改为Header:=xlYes

答案 1 :(得分:0)

正是@Peh所说的 - 这将是你的代码:

Columns("A:B").Copy
Columns("C:C").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Range("$C$1:$D$" & ActiveSheet.Range("D" & ActiveSheet.Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo