C/C++教程

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

本文主要是介绍VBA的sql distinct无法区分大小写的另一种解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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的sql distinct无法区分大小写的另一种解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!