tft每日頭條

 > 知識

 > VBA數組與字典解決方案第64講

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

知識 更新时间:2024-11-19 11:29:52

大家好,今日我們繼續講解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 如何實現按筆畫的排序?

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关知識资讯推荐

热门知識资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved