【VBA案例006】数据去重

  1. 方法一:
  2. 方法二:
  3. 方法二:扩展

大家好!你是否在为数据去重感到烦恼?

今天,我们将分享两种高效的 VBA 方法,帮助你轻松应对数据去重难题。

举个例子。

我们要对以下数据的产品和型号进行数据去重,保留唯一值。

以下是VBA代码,你也可以直接观看下方的视频解析:

方法一:

1
2
3
Sub 方法一()
Range("f1:h18").RemoveDuplicates Array(1, 2), xlYes
End Sub

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub 方法二第一次出现的值()
Dim i, j, k
Dim ar, br()

ar = Range("a1:c18")
ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))

Dim d As Object, kw$
Set d = CreateObject("Scripting.Dictionary")
'd.CompareMode = vbTextCompare '不区分大小写

For i = 1 To UBound(ar)
kw = ar(i, 1) & ar(i, 2)
If Not d.exists(kw) Then
k = k + 1
For j = 1 To UBound(br, 2)
br(k, j) = ar(i, j)
Next j
d(kw) = ""
End If
Next i

[f1].Resize(k, UBound(br, 2)) = br

End Sub

方法二:扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub 方法二最后值()
Dim i, j, k
Dim ar, br()

ar = Range("a1:c18")
ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))

Dim d As Object, kw$
Set d = CreateObject("Scripting.Dictionary")
'd.CompareMode = vbTextCompare '不区分大小写

For i = 1 To UBound(ar)
kw = ar(i, 1) & ar(i, 2)
d(kw) = i
Next i

Dim dickey
For Each dickey In d.keys
k = k + 1
For j = 1 To UBound(br, 2)
br(k, j) = ar(d(dickey), j)
Next j
Next

[f1].Resize(k, UBound(br, 2)) = br

End Sub

原始链接


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 richffan@outlook.com

文章标题:【VBA案例006】数据去重

字数:345

本文作者:Rich Fan

发布时间:2023-10-23, 00:00:00

最后更新:2024-02-27, 08:17:39

原始链接:http://fanrich.github.io/2023/10/22/VBA/VBA%E6%A1%88%E5%88%97/%E3%80%90VBA%E6%A1%88%E4%BE%8B006%E3%80%91%E6%95%B0%E6%8D%AE%E5%8E%BB%E9%87%8D/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。