VBA對多列指定類型的單元格進行數據排重

大家好,今日推出常用"積木"過程案例分享第305期,今日內容是利用字典,對多列指定類型單元格數據排重。提供給大家的這些內容是我多年經驗的記錄,來源於我多年的實踐。大家在學習VBA的時候,可以把這些代碼塊作為一塊塊的積木對待,平時積累,用時拿來修正、組合。這就是我的"積木編程"的思想,這些講解就是我推出的"積木"方案,希望大家加以利用。最近代碼多是出自我的第三套教程"VBA數組與字典解決方案"。

VBA對多列指定類型的單元格進行數據排重

Sub mynzsz_72()

Sheets("72").Select

Set rans = [a:e].SpecialCells(xlCellTypeConstants, 23)

Set mydic = CreateObject("Scripting.Dictionary")

For Each uu In rans

If Not mydic.exists(uu.Value) Then mydic.Add uu.Value, ""

Next

[h:h].ClearContents: [h1] = "多列排重"

[h2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.keys)

Set midic = Nothing

End Sub

代碼講解:

1) 上述代碼用一個Range.SpecialCells 方法可以返回一個 Range 對象,指定單元格的取值範圍,然後利用字典進行排重處理。

2) '如下SpecialCells(xlCellTypeConstants,23)語句中的23=16+4+1+2,即表示定位的常量包含4種類型的單元格:錯誤值+邏輯值+數字+文本

Set rans = [a:e].SpecialCells(xlCellTypeConstants, 23)

上述語句中利用[a:e].SpecialCells(xlCellTypeConstants, 23)選擇了[a:e]列中錯誤值+邏輯值+數字+文本的單元格。

3) '在指定的單元格內進行循環

For Each uu In rans

If Not mydic.exists(uu.Value) Then mydic.Add uu.Value, ""

Next

'清空指定區域

[h:h].ClearContents: [h1] = "多列排重"

'回填數據

[h2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.keys)

Set midic = Nothing

上述代碼實現了在指定單元格中的排重處理,不再過多的解釋。


我推出的積木編程思想內涵及教程

在我的系列書籍中一直在強調"搭積木"的編程思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要採用這種方案。其主要的內涵:

1 代碼不要自己全部的錄入。你要做的是把積木放在合適的位置然後去修正代碼,一定要拷貝,從你的積木庫中去拷貝,然後修正代碼,把時間利用到高效的思考上。

2 建立自己的"積木庫"

。平時在學習過程中,把自己認為有用的代碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程序的思路就會越廣。

VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟件沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!

我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程,目前教程均通過32位和64位兩種OFFICE系統測試。

第一套:VBA代碼解決方案 是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。

第二套:VBA數據庫解決方案 數據庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。

第三套:VBA數組與字典解決方案 數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。

第四套:VBA代碼解決方案之視頻 是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,聽元音更易接受。這套教程還會額外提供通過32位和64位兩種OFFICE系統測試的程序文件。

第五套:VBA中類的解讀和利用 這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。

第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程序信息獲得、隨機信息的利用、電子郵件的發送、VBA互聯網數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。

上述教程的學習順序:1→3→2→6→5或者4→3→2→6→5。提供的程序文件更是一座巨大的代碼庫,供讀者使用,如需要可以聯絡WeChat: NZ9668

VBA學習是一種枯燥的過程

"眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山"。學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。我的教程助力給正在努力的朋友。

"水善利萬物而不爭",綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。學習時微而無聲,利用時則巨則洶湧。"路漫漫其修遠兮,吾將上下而求索"

每一分收穫都是成長的記錄,正是這種執著,成就了秋日的收穫。最後將兩闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:


其一


浮雲掠過,暗語無聲,

唯有清風,驚了夢中啼鶯。

望星,疏移北斗,

奈將往事雁同行。

阡陌人,昏燈明暗,

忍顧長亭。

多少VBA人,

暗夜中,悄聲尋夢,盼卻天明。

怎無憑!


其二


望空,不見雲頭

幾縷秋風,幾片殘陽

幾處雁陣,幾點燈火闌珊

幾行代碼

哪裡是屬性,哪裡是方法

哪裡又是事件

呵,呵

幾根青絲不見額頭


分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。迴向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字以紀念,


分享成果,隨喜正能量


分享到:


相關文章: