ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

VBA的sql distinct无法区分大小写的另一种解决方法

2022-05-20 23:04:38  阅读:47  来源: 互联网

标签:VBA dict1 distinct arr dict sql Test 字典


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

 

 

' 不重复的的数据存在的字典

标签:VBA,dict1,distinct,arr,dict,sql,Test,字典
来源: https://www.cnblogs.com/wjl-de-java/p/16293940.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有