VBA 的SQL是无法区分大小写的,比如distinct和两个表连接用ON的时候,这个时候也是不区分大小的
模拟Sheet,Shee名字为Test
---------Test--------------
A
1 Name
2 Joker
3 joker
4 jokeR
------------------------------
strsql = " SELECT DISTINCT NAME FROM [Test$] "
运行后的结果
---------Test--------------
A
1 Name
2 Joker
------------------------------
这个结果不是我想要的结果,所以要用VBA代码来解决这个问题
第一个想到的就是 字典,因为字典的Key不能重复,而且VBA中的字典可以获得所有Key值,直接转换为数组比较方便
下面是VBA代码
---------Test--------------
A
1 Name
2 Joker
3 joker
4 jokeR
------------------------------
Dim dict ' 不重复的的数据存在的字典 Dim dict1 '重复数据存在的字典 Dim arr1() '用来储存sheet里的数据 Dim arr2() '用来获取字典(dict)的Key值 Set dict = CreateObject("Scripting.Dictionary") Set dict1 = CreateObject("Scripting.Dictionary")
i = Worksheets("Test").[A1048576].End(xlUp).Row
arr = Worksheets("Test").Range("A1:A" & i).Value '获取sheet指定单元格的数据,VBA会自动转换为二级数组 For k = 1 To i Step 1 '从第一行循环到最后一行 If dict1.exists(arr(k - 1, 1)) = False Then 'dict1 先判断数据是否重复 If dict.exists(arr(k - 1, 1)) = False Then dict.Add arr(k - 1, 1), 1 Else Debug.Print 1 dict.Remove (arr(k - 1, 1)) dict1.Add arr(k - 1, 1), 1 End If End If Next k arr2 = dict.keys Worksheets("Test").Range("A2:A" & i).Clear For k = 2 To UBound(arr2) + 2 Step 1 Worksheets("Test").Range("A" & k) = arr2(k - 2) Next k
' 不重复的的数据存在的字典