首页
/
每日頭條
/
知識
/
VBA數組與字典解決方案第64講
VBA數組與字典解決方案第64講
更新时间:2026-09-04 13:38:36

大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第64講内容:從字典提取數據後,漢字的筆畫和拼音排序處理.

排序的方式,是我在本套書中重點介紹的内容,之前的講解中我先後講解了幾種方法,但實際的工作中應用的最為普遍的仍是SORT排序,在這講的内容中我将講解一下當字典回填數據後用此方法進行按拼音和按筆畫排序的兩種方式.

實例的數據如下,在A列中有許多雜亂的數據,我們要利用字典來提出出不重複的數據,并反映每個數據出現的次數,然後回填數據,在回填的過程中按出現的次數進行排序.

VBA數組與字典解決方案第64講(VBA數組與字典解決方案第64講)1

思路分析:我們利用字典對數據進行排重處理,如果跟我學到這裡,這應該不是難事了,在字典的加載時利用鍵來裝數據,利用鍵值來裝出現的次數,之後回填數據,回填數據時利用先回填鍵的方法,然後根據鍵的數據填鍵值,最後的是排序,把回填區域的數據全選,然後按照出現的次數後數據的性質進行排序,下面看我給出的代碼:

Sub mynzsz_64() '第64講 從字典提取數據後,漢字的筆畫和拼音排序處理

Sheets("64").Select

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

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

For Each ran In Sheets("64").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

'清空區域待回填

[f:e].ClearContents

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

'回填鍵數據和鍵值數據

Sheets("64").[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

'在鍵和鍵值區域進行排序處理

rs = ActiveSheet.Range("e1").CurrentRegion.Rows.Count

Set rngs = ActiveSheet.Range(Cells(1, "e"), Cells(rs, "f"))

'rngs.Sort key1:=Cells(1, "f"), Order1:=xlDescending, key2:=Cells(1, "e"), _

order2:=xlAscending, Header:=xlYes, SortMethod:=xlStroke '筆畫

'rngs.Sort key1:=Cells(1, "f"), Order1:=xlDescending, key2:=Cells(1, "e"), _

order2:=xlAscending, Header:=xlYes, SortMethod:=xlPinYin '拼音

rngs.Sort key1:=Range(Cells(1, "f"), Cells(rs, "f")), Order1:=xlDescending, key2:=Range(Cells(1, "e"), Cells(rs, "e")), _

order2:=xlAscending, Header:=xlYes, SortMethod:=xlPinYin '拼音

End Sub

代碼的截圖:

VBA數組與字典解決方案第64講(VBA數組與字典解決方案第64講)2

代碼講解:

1 上述過程實現了: 利用字典mydic對數據進行排重處理,在字典的加載時利用鍵來裝數據,利用鍵值來裝出現的次數,之後回填數據,回填數據時利用先回填鍵的方法,然後在鍵的區域建立循環,根據鍵的數據在字典中提取鍵值,最後的是排序,把回填區域的數據全選,然後按照出現的次數後數據的性質進行排序,這裡我給出了三種方案,在下面我會一一講解。

2 For Each ran In Sheets("64").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 '回填鍵數據和鍵值數據

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

上述代碼實現了鍵數據的回填

4 For i = 1 To mydic.Count

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

Next

上述代碼實現了鍵值的提取和回填

5 rs = ActiveSheet.Range("e1").CurrentRegion.Rows.Count

Set rngs = ActiveSheet.Range(Cells(1, "e"), Cells(rs, "f"))

設定排序區域。

6 'rngs.Sort key1:=Cells(1, "f"), Order1:=xlDescending, key2:=Cells(1, "e"), _

order2:=xlAscending, Header:=xlYes, SortMethod:=xlStroke '筆畫

上述代碼是實現按筆畫排序

7 'rngs.Sort key1:=Cells(1, "f"), Order1:=xlDescending, key2:=Cells(1, "e"), _

order2:=xlAscending, Header:=xlYes, SortMethod:=xlPinYin '拼音

上述代碼實現了按拼音排序。

8 rngs.Sort key1:=Range(Cells(1, "f"), Cells(rs, "f")), Order1:=xlDescending, key2:=Range(Cells(1, "e"), Cells(rs, "e")), _

order2:=xlAscending, Header:=xlYes, SortMethod:=xlPinYin '拼音

排序的另外一種寫法。

9 Range對象的Sort方法可對值區域進行排序。其語法格式如下:

表達式: .Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)

該方法有很多參數,這些參數都可省略。各參數的含義如下:

① Key1:指定第一排序字段,作為區域名稱(字符串)或Range對象;确定要排序的值。

② Order1:确定Key1中指定的值的排序次序,可設置為常量xlAscending(升序)或xlDescending(降序)。

③ Key2:第二排序字段。

④ Type:指定要排序的元素。

⑤ Order2:确定Key2中指定的值的排序次序。

⑥ Key3:第三排序字段。

⑦ Order3:确定Key3中指定的值的排序次序。

⑧ Header:指定第一行是否包含标題信息。

⑨ OrderCustom:指定在自定義排序次序列表中的基于1的整數偏移。

⑩ MatchCase:設置為True,則執行區分大小寫的排序,設置為False,則執行不區分大小寫的排序;不能用于數據透視表。

⑪ Orientation:指定以升序還是降序排序。可用常量xlSortColumns(按列排序)或xlSortRows(按行排序,這是默認值)。

⑫ SortMethod:指定排序方法。可用常量xlPinYin(按漢語拼音順序排序,這是默認值)或xlStroke(按每個字符的筆畫數排序)。

⑬ DataOption1:指定Key1中所指定區域中的文本的排序方式,可使用常量xlSortNormal(分别對數字和文本數據進行排序,這是默認值)或xlSortTextAsNumbers(将文本作為數字型數據進行排序)。

⑭ DataOption2:指定Key2中所指定區域中的文本的排序方式。

⑮ DataOption3:指定Key3中所指定區域中的文本的排序方式。

⑯ 使用Sort方法排序時,最多隻能按3個關鍵字進行排序。

下面看代碼的運行:

VBA數組與字典解決方案第64講(VBA數組與字典解決方案第64講)3

今日内容回向:

1 如何實現按拼音的排序?

2 如何實現按筆畫的排序?

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
如何用洗面奶正确洗臉
如何用洗面奶正确洗臉
1、洗幹淨手2、把臉打濕3、擠兩顆綠豆大小的洗面奶到掌心,加點水(用量自己控制,如果少了下回就多加些)4、用掌心到指尖當中這段距離互搓,搓出泡5、把打起的泡擦臉上,從下往上打圈式按摩6、時間控制在一分鐘内,然後用流動的清水把泡沫洗掉7、一定要洗幹淨,特别是發迹邊緣那,如果沒洗幹淨會發澀然後長豆8、最後用濕毛巾把臉上的水份吸幹,不要用力摩擦
2026-09-04
電腦藍屏和主闆有關系嗎
電腦藍屏和主闆有關系嗎
電腦藍屏是跟主闆或CPU有關系,也許不兼容。但是,一般和軟件之間的沖突、硬件沖突有關。病毒也可以造成這樣。建議先卸載最近安裝的軟件試一試,如果藍屏消失,說明你最近裝的軟件和系統沖突。如果還是藍屏,可以重裝系統後,檢查内存,清潔一下,或者換個插槽。電腦機箱主闆,又叫主機闆(mainboard)、系統闆(systemboard)或母闆(motherboard);它分為商用主闆和工業主闆兩種。它安裝在機
2026-09-04
QQ中的Q我吧是什麼意思
QQ中的Q我吧是什麼意思
QQ中的Q我吧意思是表示用戶希望有人同其聊天。Q我吧一詞來源于騰訊公司出品的QQ聊天軟件中,表示一種聊天時的狀态。QQ聊天狀态分為7種:我在線上、Q我吧、離開、忙碌、請勿打擾、隐身、離線。當用戶使用Q我吧狀态時,頭像右下角會出現一個笑臉圖标,QQ排名也會相應靠前,表示用戶希望有人同其聊天。
2026-09-04
王小波的時代三部曲哪個版本最好
王小波的時代三部曲哪個版本最好
花城出版社的可以“時代三部曲”表面上是王小波作品的合集,每部之間似乎沒有什麼聯系,但其實是有一個邏輯順序的。這個邏輯順序就是:《黃金時代》中的小說寫現實世界;《白銀時代》中的小說寫未來世界;《青銅世界》寫的故事都發生在過去。其實還有《黑鐵時代》,是王小波故世以後,其妻李銀河将他生前未發表的作品編輯成冊發表的,大多是成名以前的作品,也值得一閱。
2026-09-04
饅頭包子是發物嗎
饅頭包子是發物嗎
饅頭包子不是發物。發物是指富于營養或有刺激性特别容易誘發某些疾病或加重已發疾病的食物,包子饅頭不僅不會誘發疾病,而且能夠為身體出示人體所需要的蛋白,維他命和營養元素。發物中如雞、蛋類、豬頭肉等對人體而言為異體蛋白,這種異體蛋白就可構成過敏源而導緻人體發病。魚、蝦、蟹類本身就含組織胺,而組織胺可使血管通透性增高、微血管擴張、充血、血漿滲出、水腫、腺體分泌亢進及嗜酸性白細胞增高等,從而導緻了機體變态反
2026-09-04
Copyright 2023-2026 - www.tftnews.com All Rights Reserved