技术文摘
VBA 数组与字典去重的多种方法
2024-12-28 22:42:53 小编
VBA 数组与字典去重的多种方法
在 VBA 编程中,处理数据时经常会遇到需要去除重复项的情况。数组和字典是 VBA 中常用的数据结构,下面将介绍几种利用它们进行去重的方法。
一、使用字典去重
字典(Dictionary)是一种键值对的数据结构,其中键是唯一的。我们可以利用这一特性来实现去重。
以下是一个简单的示例代码:
Sub RemoveDuplicatesUsingDictionary()
Dim arr() As Variant
Dim dict As Object
Dim i As Long
arr = Range("A1:A10").Value
Set dict = CreateObject("Scripting.Dictionary")
For i = LBound(arr) To UBound(arr)
If Not dict.Exists(arr(i, 1)) Then
dict(arr(i, 1)) = 1
End If
Next i
' 输出去重后的结果
Range("B1").Resize(dict.Count) = Application.Transpose(dict.Keys)
End Sub
在上述代码中,我们遍历数组中的每个元素,如果字典中不存在该元素,则将其添加为键,最后字典的键就是去重后的结果。
二、使用数组去重
通过循环和比较的方式,在数组内部进行去重操作。
示例代码如下:
Sub RemoveDuplicatesUsingArray()
Dim arr() As Variant
Dim i As Long, j As Long
Dim uniqueArr() As Variant
arr = Range("A1:A10").Value
ReDim uniqueArr(1 To UBound(arr))
uniqueArr(1) = arr(1, 1)
k = 1
For i = 2 To UBound(arr)
For j = 1 To k
If arr(i, 1) = uniqueArr(j) Then
Exit For
End If
Next j
If j > k Then
k = k + 1
uniqueArr(k) = arr(i, 1)
End If
Next i
' 输出去重后的结果
Range("C1").Resize(k) = Application.Transpose(uniqueArr)
End Sub
这种方法通过两层循环来比较元素,将不重复的元素添加到新的数组中。
三、结合排序和比较去重
先对数组进行排序,然后通过相邻元素的比较来去除重复项。
代码如下:
Sub RemoveDuplicatesWithSortAndCompare()
Dim arr() As Variant
Dim i As Long
arr = Range("A1:A10").Value
Call BubbleSort(arr)
ReDim uniqueArr(1 To UBound(arr))
uniqueArr(1) = arr(1, 1)
k = 1
For i = 2 To UBound(arr)
If arr(i, 1) <> uniqueArr(k) Then
k = k + 1
uniqueArr(k) = arr(i, 1)
End If
Next i
' 输出去重后的结果
Range("D1").Resize(k) = Application.Transpose(uniqueArr)
End Sub
Sub BubbleSort(ByRef arr() As Variant)
Dim i As Long, j As Long
Dim temp As Variant
For i = LBound(arr) To UBound(arr) - 1
For j = LBound(arr) To UBound(arr) - i - 1
If arr(j, 1) > arr(j + 1, 1) Then
temp = arr(j, 1)
arr(j, 1) = arr(j + 1, 1)
arr(j + 1, 1) = temp
End If
Next j
Next i
End Sub
通过以上几种方法,我们可以根据具体的需求和数据特点选择合适的方式来实现 VBA 中数组和字典的去重操作,提高数据处理的效率和准确性。
- C++客户端单元测试实践
- 2022 年不容错过的 React 库!
- 分布式链路追踪 Jaeger 与微服务 Pig 在 Rainbond 中的实践分享
- 策略梯度法在协作性 MARL 中高效的原因
- 跟随 Guava 探索 Java 中的不可变集合
- 腾讯曹文升:游戏专项测试与游戏开发难度相当 | T 前线
- TCP 四次挥手:你必须了解的要点
- Python 包依赖管理的解决方案找到了!
- 11 个 ES2022(ES13)令人惊叹的 JavaScript 新特性
- Python 中神秘的常用函数:lambda 函数深度剖析
- C 语言库函数之 printf()
- Python+requests+pytest 接口自动化测试框架搭建浅析
- 京东 APP OpenHarmony 化跨端开发探究
- 一文读懂字节跳动埋点验证平台
- C 语言数组于内存中的表示方式