你需要自定義排序嗎?VBA代碼可以實現

2020-12-16 VBA語言專家

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

Sub mynzsz_66()

Sheets("66").Select

Set mydic = CreateObject("Scripting.Dictionary")

For Each ran In Sheets("66").Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)

If ran.Value <> "" Then

If Not mydic.exists(ran.Value) Then

mydic.Add ran.Value, 1

Else

mydic(ran.Value) = mydic(ran.Value) + 1

End If

End If

Next

[g:e].ClearContents

Sheets("66").Range("e1") = "數據": Sheets("66").Range("f1") = "次數"

Sheets("66").[E2].Resize(mydic.Count) = WorksheetFunction.Transpose(mydic.keys)

For I = 1 To mydic.Count

Cells(I + 1, "f") = mydic(Cells(I + 1, "e").Value)

Next

Set mydic = Nothing

Set mydic = CreateObject("Scripting.Dictionary") '字典

rs = Range("C1").End(xlDown).Row

For I = 2 To rs

mydic(Cells(I, "C").Value) = I - 1

Next

rs = Range("E1").End(xlDown).Row

For I = 2 To rs

Cells(I, "g") = mydic(Cells(I, "E").Value)

Next

Set Rng = Range(Cells(1, "e"), Cells(rs, "g"))

Rng.Sort key1:=Range(Cells(1, "g"), Cells(rs, "g")), Order1:=xlAscending, Header:=xlYes

Columns("g").Clear

Set mydic = Nothing

End Sub

代碼講解:

1 上述代碼實現了按自定義排序要求進行排序。首先將數據裝入字典mydic,同時計算重複次數裝入鍵值,回填數據,並清空字典。然後,將字典再次裝載,這次是裝自定義排序的數據,鍵值用排序要求的順序,這裡用行數代替;最後,在回填數據區域G列按照E列的值獲取應該排序的順序值,設定排序區域,按照G列進行排序,排序後刪除G列數據。

2 '數據賦值給字典,同時統計出現的次數

For Each ran In Sheets("66").Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)

If ran.Value <> "" Then

If Not mydic.exists(ran.Value) Then

mydic.Add ran.Value, 1

Else

mydic(ran.Value) = mydic(ran.Value) + 1

End If

End If

Next

3 '自定義排序序列,排序的基準

Set mydic = Nothing

Set mydic = CreateObject("Scripting.Dictionary") '字典

rs = Range("C1").End(xlDown).Row

For I = 2 To rs

mydic(Cells(I, "C").Value) = I - 1

Next

上述語句將自定義排序的序列裝入字典,同時鍵值取I-1即要排序的值

4 '添加自定義排序序列。

rs = Range("E1").End(xlDown).Row

For I = 2 To rs

Cells(I, "g") = mydic(Cells(I, "E").Value)

Next

在回填區域的G列,根據E列的值填上應排的序號。

5 '實現自定義排序

Set Rng = Range(Cells(1, "e"), Cells(rs, "g"))

Rng.Sort key1:=Range(Cells(1, "g"), Cells(rs, "g")), Order1:=xlAscending, Header:=xlYes

上述代碼在E:G列排序,排序的規則是按G列,然後刪除G列的值。

在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!學習VBA是個過程,如太白詩云:眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山。

「水善利萬物而不爭」,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,有一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。茶,滿也好,少也好,不要計較;濃也好,淡也好,其中自有值得品的味道。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。在後疫情更加嚴峻的存量殘殺世界中,為自己的生存進行知識的儲備,特別是新知識的儲備。學習時微而無聲,利用時則巨則洶湧。

VBA是利用Office實現自己小型辦公自動化的有效手段,我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了五部VBA專門教程。

第一VBA代碼解決方案是VBA中各個知識點的講解,覆蓋絕大多數的VBA知識點,初學必備;

第二VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作。

第三VBA數組與字典解決方案數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習。

第四VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。

第五VBA中類的解讀和利用是一部高級教程,講解類的虛無與肉身的度化,可以對促進自己理論的提高。

學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。這些教程也是為幫助大家起航,助上我自己之力,我的上述教程是我多的經驗的傳遞,大家可以根據1,3,2,5或者是4,3,2,5的順序逐漸深入的逐漸學習。

最後將一闕詞送給致力於VBA學習的朋友:

浮雲掠過,暗語無聲,

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

望星,疏移北鬥,

奈將往事雁同行。

阡陌人,昏燈明暗,

忍顧長亭。

多少VBA人,

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

怎無憑!

分享成果,隨喜正能量

相關焦點

  • 【Excel VBA】自定義排序的三種方法
    ……何謂自定義排序,就是按指定的順序對數據源進行排序唄……第1種方法是系統自帶的OrderCustom,優點是代碼簡潔,缺點是自定義序列有字符長度限制(255個)。第1種建議掌握,第2種建議了解,第3種……能懂就懂,不懂先放著吧~現需要根據E列所指定的部門先後順序,對數據源進行重新排序,如果部門不在指定序列內,則排放在數據源末尾第1種方法代碼如下▼代碼解析見注釋如看不全,可以左右拖動...
  • 如何使用VBA編程進行自定義排序?
    一共有三種方法,一個比一個難,但也各有優缺點。第1種方法是系統自帶的OrderCustom語句,優點是代碼簡潔,缺點是自定義序列有字符長度限制(255個)。第2種方法是字典+數組,藉助輔助列進行排序。優點是不會破壞單元格的各種屬性,比如公式、填充色、數據驗證等,缺點是畢竟用了輔助列,空間處理上需要注意下。
  • 從字典提取數據後,實現自定義排序
    大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第66講內容:從字典提取數據後,實現自定義排序.對於排序而言,我們在上節講了亂序,是工作中經常會用到的,今日我們講解自定義排序,什麼是自定義排序呢?
  • excel中2000行數據以行排序,你需要多長時間
    vba代碼,錄製宏就是將我們的操作記錄下來,將其編譯為vba代碼,當我下次需要重複操作的時候只需要運行宏excel就會幫自動幫我們搞定。想要按照行來排序,首先我們需要選擇想要排序的數據區域,然後點擊排序選擇自定義排序,然後在排序提醒中選擇以選定當前的區域排序,然後在選項中選擇按照行來排序,將關鍵字設置為行1其餘保持默認即可,點擊排這樣的話我們就按照行來排序了,但是這麼做我們只能一行一行的排序,在這裡我們有2000行數據,一行一行的排序三四個小時都不一定做得完,這個時候我們就可以使用錄製宏來解決這樣的問題
  • 【VBA自定義函數】315個自定義函數
    168、這是一個將英文字反轉的自定函數169、關於個人所得稅的170、一個能計算是否有重複單元的函數171、試編寫數字金額轉中文大寫的函數172、人民幣大小寫轉換函數173、獲取區域顏色值自定義函數174、獲取活動工作表名的自定義函數175、顯示在「插入函數」對話框的「或選擇類別」下拉列表中176、複合函數STATFUNCTION177、對工作表的第一列進行各種查詢178、序數詞轉換函數179、獲取最後一行行數的
  • 利用VBA代碼,自定義一種你需要的數據類型
    大家好,我們今日繼續講解VBA代碼解決方案的第134講內容:隨機文件的特點及如何用自定義數據類型訪問隨機文件。當某文件包含結構數據時,就可以以隨機模式打開它。以隨機模式打開文件你可以做到:同時讀寫、快速訪問某特別記錄。隨機文件有什麼特點呢?
  • 利用VBA,如何實現對數據的複雜排序
    排序是計算機裡經常進行的一種操作,其目的是將一組「無序」的記錄序列調整為「有序」的記錄序列。或者說排序就是將雜亂無章的數據元素,通過一定的方法按關鍵字順序排列的過程。在工作中我們經常會用到排序,對於高版本的EXCEL來說,可以實現多重的排序功能,那麼是否可利用VBA實現多重排序功能呢?今天我們來給大家講解這個方法。
  • Excel vba 利用定義名稱實現用戶登錄功能
    文/江覓易見在vba 中實現用戶登錄,並對登錄用戶進行身份識別,然後對用戶進行分組管理,此類功能值得進一步思考。這裡介紹一種方法,利用Excel中的名稱管理來進行身份識別,起到用戶登錄次數以及增減用戶的功能。
  • Excel中如何實現按照自定義序列排序
    Excel中常見的排序方式有按照數據升序、降序和顏色排序,但工作中有時候需要按照英文日期、學歷、部門、職稱、天幹地支、領導關心的數據優先級等許多自己定義的序列排序。如何實現按照自己的心願隨意排序呢?本文以下表為例,詳細介紹如何按照學歷來排序,按照其他序列排序的方法也類似。
  • Excel VBA入門教程 1.10 單元格排序示例
    舉個排序的例子,要對A1:A20的單元格區域進行排序,區域內的內容為1-100的隨機整數, 規則是大於50的倒序排列,小於50的正序排列。
  • excel VBA是什麼?VBA編程入門教程
    本篇將介紹excel vba是什麼?vba編程入門教程,有興趣的朋友可以了解一下!一、excel vba是什麼?VBA的英文全稱是Visual Basic for Applications,是一門標準的宏語言。VBA語言不能單獨運行,只能被office軟體(如:Word、Excel等)所調用。
  • 列排序、行排序、自定義排序,你想要的都在這裡!
    一般排序的方式分為三種:升序、降序以及後面要說到的自定義排序。涉及到列的順序變動,普通的列排序是無法實現的,這裡行排序可以輕鬆搞定~依次點擊【數據】—【排序】—【選項】—【按行排序】,點擊確定;接著主要關鍵字選擇「行1」,次序選擇「升序」,點擊確定按鈕即可完成排序。
  • 使用vlookup解決自定義排序的問題,原來自定義排序竟如此簡單
    Hello,大家好,今天跟大家分享下如何自定義排序,實現想怎麼排序就怎麼排序,工作中我們可能會遇到這樣的問題,就是要根據給定的數據位置進行排序,如果我們直接使用排序excel會根據默認的排序規則進行排序,而不能達到我們想要的結果,解決這樣的問題,跟大家分享2種方法,一種是使用自定義排序
  • 根據顏色求和與計數,好難啊,使用vba自定義函數即可輕鬆搞定
    Hello,今天有粉絲遇到這樣的一個問題,就是老闆給他很多帶有顏色的表格,想讓他根據顏色求和以及計數,他一個一個做了很久也沒做出來,問我有沒有什麼簡單的方法,當然有了,我們覺得最快捷的方法就是使用vba自定義函數來計算,操作也非常的簡單,下面就讓我們來一起操作下吧
  • Java實現冒泡排序算法
    學習方法推薦:#學習方法1.從基礎開始,系統化學習2.多動手,每一種數據結構與算法,都自己用代碼實現出來3.思路更重要:理解實現思想,不要背代碼4.與日常開發結合,對應應用場景學習內容推薦:數據結構與算法內容比較多,我們本著實用原則,學習經典的、常用的數據結構、與常用算法#學習內容:1.數據結構的定義2.算法的定義3.複雜度分析4
  • 「Python替代Excel Vba」系列(終):vba中調用Python
    xlwings quickstart myproject --standalone其中 myproject ,可以自定義任何名字,這個名字是生成的目錄名字此刻你會發現在當前目錄會有一個打開myproject.xlsm文件,你會看到一個叫xlwings的功能區頁。如下圖:點一下上圖紅框部分,即可註冊你的 py 文件中的自定義方法到 vba 中。
  • 利用VBA實現數據的隨機排序
    這講是第四節「利用VBA實現數據的隨機排序」。這套教程從簡單的錄製宏開始講解,一直到窗體的搭建,內容豐富,案例眾多。大家可以非常容易的掌握相關的知識,這套教程面向初學人員,共三冊,十七章,都是我們在利用EXCEL工作過程中需要掌握的知識點,希望大家能掌握利用。第四節 利用VBA實現數據的隨機排序大家好,我們這講的內容是隨機排序的實現。什麼是隨機排序呢?
  • VBA代碼大全010:用vba遍歷文件夾及其子文件夾內的文件
    其中又以循環處理多個文件最為頻繁,一個excel工作簿內的內容循環有些人還可以藉助函數來實現,但是涉及到多個文件的循環處理時,用函數就顯得無力回天,這時候就需要祭出vba大招了。我們經常遇到的是這樣的場景,需要處理的數據位於多個不同的文件,這時候就涉及到對每個文件的逐一讀取,也就是遍歷文件。
  • Excel VBA解讀(54):排序——Sort方法
    」和「篩選」往往在一起,這大概是很多數據需要先排序後篩選吧!僅用於數據透視表,可以指定為xlSortLabels或者xlSortValues。參數Header,指定是否第一行包含標題信息,默認為xlNo。如果想要Excel嘗試確定標題,那麼指定其值為xlGuess。參數OrderCustom,指定一個基於1的整數偏移量到自定義排序順序列表,使用自定義的排序順序進行排序。
  • VBA字典與工作表函數結合實現排序
    [E2].Resize(mydic.Count, 2) = XSet mydic = NothingEnd Sub代碼解析:1 上述過程實現了:我們首先把數據裝入字典mydic,將數值放入字典的鍵,出現的次數放入鍵值中數,然後把鍵及鍵值分別放入數組