一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Excel VBA 8.7聽(tīng)說(shuō)SQL很強(qiáng)大,可以再不打開(kāi)文件的情況下獲取唯一值,有沒(méi)有興趣

 Excel和VBA 2021-06-09

獲取唯一值,聽(tīng)說(shuō)你喜歡用字典


點(diǎn)擊上方“Excel和VBA”,選擇“置頂公眾號(hào)”

致力于原創(chuàng)分享Excel的相關(guān)知識(shí),源碼,源文件打包提供

一起學(xué)習(xí),一起進(jìn)步~~


前前后后關(guān)于獲取數(shù)據(jù)唯一值的方法,我也是分享了有好幾種了,不知道小伙伴們有沒(méi)有中意的呢?其實(shí)在分享的過(guò)程中,有很多的小伙伴們也是提供了很多不同的方式,今天我在分享一種大家沒(méi)有提到的方法,SQL方法,接觸過(guò)數(shù)據(jù)的小伙伴們一定非常的熟悉SQL了,其實(shí)方法有很多種,根據(jù)大家自己手上的資源和所掌握的知識(shí)的不同,要延伸出來(lái)的話,有很多方法,這里我們秉著從VBA的角度出發(fā)來(lái)學(xué)習(xí)VBA的前提,盡可能多的豐富大家的處理方法,同時(shí)學(xué)習(xí)一些新的知識(shí)

場(chǎng)景說(shuō)明

這里我們還是利用之前的案例場(chǎng)景,這次我們使用的是SQL方法,可以實(shí)現(xiàn)的好處就是再不打開(kāi)工作表的情況下,就可以將工作表的數(shù)據(jù)去重并返回結(jié)果給我們,當(dāng)數(shù)據(jù)比較大的時(shí)候,這個(gè)方法的好處是非常的明顯的。

代碼區(qū)

為了驗(yàn)證我們并不需要打開(kāi)原始數(shù)據(jù)數(shù)據(jù),這里我們新建一個(gè)新的工作簿。并且將這兩個(gè)工作簿放在同一個(gè)文件夾內(nèi)部,方面我們的調(diào)用的

首先我們來(lái)嘗試下通過(guò)SQL的方法來(lái)實(shí)現(xiàn)單列數(shù)據(jù)的唯一值的獲取,這里我們來(lái)獲取姓名列

Sub 單列()Set conn = CreateObject("adodb.connection") Set Rst = CreateObject("ADODB.recordset") conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/8-6.xlsm"Dim sql As Stringsql = "Select DISTINCT 姓名 from [sheet1$] "With ActiveSheet.Range("a2:i100") = "" Set Rst = conn.Execute(sql) For i = 0 To Rst.Fields.Count - 1 .Cells(1, i + 1) = Rst.Fields(i).Name Next i .Range("a2").CopyFromRecordset conn.Execute(sql)End Withconn.CloseSet conn = NothingEnd Sub

很多熟悉SQL的小伙伴們一定會(huì)覺(jué)得比較的好奇,為什么會(huì)有這么多的代碼,SQL中獲取唯一值只需要簡(jiǎn)簡(jiǎn)單單的一句話!

說(shuō)到底,SQL雖然強(qiáng)大并且快,但是他并不能夠直接在VBA中使用,和字典以及其它方式一樣,還是需要通過(guò)聲明,調(diào)用的方式來(lái)獲得。

先來(lái)看看效果。

這里我們可以看到,在不需要但單獨(dú)打開(kāi)工作表的情況下,我們輕松的實(shí)現(xiàn)了姓名列唯一值的獲取。

那么假設(shè)我們需要的是獲取多列的唯一值呢?比方說(shuō)所有數(shù)據(jù)的唯一值呢?

Sub sql()Set conn = CreateObject("adodb.connection")Set Rst = CreateObject("ADODB.recordset")conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/8-6.xlsm"Dim sql As Stringsql = "Select DISTINCT * from [sheet1$] "With ActiveSheet.Range("a2:i100") = "" Set Rst = conn.Execute(sql) For i = 0 To Rst.Fields.Count - 1 .Cells(1, i + 1) = Rst.Fields(i).Name Next i .Range("a2").CopyFromRecordset conn.Execute(sql)End Withconn.CloseSet conn = NothingEnd Sub

從結(jié)果來(lái)看,我們的數(shù)據(jù)是非常的完美,并沒(méi)有任何的問(wèn)題的。

代碼解析

那么我們來(lái)看看在VBA中是如何使用SQL的吧,其實(shí)只要學(xué)會(huì)了使用方法,對(duì)于SQL很熟悉的小伙伴們就可能夠擴(kuò)展出更多的運(yùn)用。

Set conn = CreateObject("adodb.connection")Set Rst = CreateObject("ADODB.recordset")

首先老規(guī)矩,既然不能直接使用,那么肯定是需要先通過(guò)聲明告訴系統(tǒng)我現(xiàn)在要調(diào)用SQL這個(gè)東西的。

conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/8-6.xlsm"

既然已經(jīng)聲明了SQL,那么可能就需要有對(duì)象了,我們是要之前的8-6的數(shù)據(jù)源中得到數(shù)據(jù)的,那么自然要將這兩個(gè)表鏈接在一起,如何鏈接呢?就是上面的代碼,

在實(shí)際的使用中,大家只需要更改后面的一部分就可以了,即data source=“*******”這一部分的數(shù)據(jù),這一部分代表的就是數(shù)據(jù)源所在位置。

然后就是最重要的SQL語(yǔ)句了

獲取唯一值的方法就簡(jiǎn)單的一句話。

獲取姓名列的唯一值

sql = "Select DISTINCT 姓名 from [sheet1$] "

整體所有數(shù)據(jù)的唯一值

sql = "Select DISTINCT * from [sheet1$] "

因?yàn)镾QL的方法并不是我們本章節(jié)的主體,這里我們就暫時(shí)簡(jiǎn)單的介紹下SQL在VBA中的運(yùn)用,給大家提供一個(gè)思路,一個(gè)方法。具體的使用方法以及SQL的各種常用組合,我們會(huì)在后面的章節(jié)中慢慢張開(kāi)。

==========================

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    国产免费自拍黄片免费看| 国产高清精品福利私拍| 欧美午夜性刺激在线观看| 亚洲中文字幕亲近伦片| 久久婷婷综合色拍亚洲| 黄色片一区二区在线观看| 伊人久久青草地综合婷婷| 狠狠干狠狠操亚洲综合| 成人午夜在线视频观看| 五月婷婷综合激情啪啪| 国产欧美一区二区久久| 99久久精品视频一区二区| 国产精品自拍杆香蕉视频| 亚洲国产精品久久琪琪| 久久热九九这里只有精品| 欧美一区二区三区视频区| 99日韩在线视频精品免费| 老熟妇2久久国内精品| 欧美日韩免费观看视频| 日韩一区二区三区四区乱码视频| 中文字幕av诱惑一区二区| 欧美熟妇一区二区在线| 国产精品伦一区二区三区四季 | 老司机精品视频在线免费| 亚洲欧美日韩中文字幕二欧美 | 国产一级二级三级观看| 国产精品国三级国产专不卡| 欧美午夜视频免费观看| 99久久精品一区二区国产| 日韩偷拍精品一区二区三区| 亚洲精品福利入口在线| 儿媳妇的诱惑中文字幕| 五月婷婷缴情七月丁香| 婷婷激情五月天丁香社区 | 中文字字幕在线中文乱码二区 | 少妇人妻无一区二区三区| 国产亚洲欧美日韩国亚语| 亚洲中文字幕乱码亚洲| 自拍偷女厕所拍偷区亚洲综合| 东京热男人的天堂久久综合| 欧美又黑又粗大又硬又爽|