技术文摘
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 中数组和字典的去重操作,提高数据处理的效率和准确性。
- 深度剖析 Synchronized 的锁优化机制
- 探索 Go 中文件的打包与压缩方式
- SpringCloud 架构演变的起源
- 面向对象方式操作 JSON 并支持四则运算的 JSON 库
- Map 与函数式接口方法:优雅化解 if-else
- 将 SpringBoot 搬至 K8s 照猫画虎却翻船,领悟 Go 在云原生的两大优势
- Electron 进程间的四种通信方式
- Playwright:自动化测试工具快速上手
- JavaScript 条件语句的优化窍门
- 技术 Leader 必备的七大独特脑回路揭秘
- Druid SqlParser 的理解与使用入门指南
- Spring WebFlux 请求处理的流程
- 新到技术总监对 RabbitMQ 的讲解透彻至极,令人佩服!
- Web 3 时代哪些编程语言将崭露头角?
- TienChin 项目中自定义权限表达式的实现方法