龙空技术网

从字典中提取数据后,实现多字段排序的方法

VBA语言専攻 174

前言:

此刻各位老铁们对“排序的关键字段有哪些”大体比较注意,我们都想要学习一些“排序的关键字段有哪些”的相关知识。那么小编同时在网摘上汇集了一些有关“排序的关键字段有哪些””的相关内容,希望各位老铁们能喜欢,姐妹们快快来学习一下吧!

大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第67讲内容:从字典中提取数据后,实现多字段排序

关于排序,我先后讲了乱序排序,自定义排序等特殊的排序方法,这些是工作中必不可少的,希望大家好好利用。今日讲多关键字段排序,也就是说排序要求实现按三个以上字段来进行。我们在前面的讲解中知道SORT排序只能实现三个字段,如何实现四个及以上的方案呢?今日我们就以4个字段为例讲解一下如何实现。

实例,下面数据中A列是城市的名称,后面是三列数据,我们要实现每个城市的新的3个数据计算,回填到指定区域。并实现按"序列6""序列5""序列4""名称"的四个字段的先后排序。如何实现呢?

思路分析:在提取数据时候,我们用将类赋值给键值的方案,没有熟悉这方面内容的朋友要看看我之前的文章再学习一下有关将类作为键值的方法。我们将A列的数据作为键,把B,C,D列的内容作为键值的属性来处理。在数据回填的时候,可以直接进行运算,并回填。在实现多关键字排序的时候,我们利用从后往前多次排序的方案,考虑用一个循环来解决,由于用到多个关键字段,可以考虑用Offset函数。下面看我给出的代码:

Sub mynzsz_67() '第67讲 从字典提取数据后,实现多字段排序

Sheets("67").Select

Dim uu As myitem

myarr = Range("a2:d" & Range("a1").End(xlDown).Row)

Set mydic = CreateObject("Scripting.Dictionary")

'将数据装入字典,键值是类,利用类的属性完成字典数据的赋值

For i = 1 To UBound(myarr)

Set uu = New myitem

uu.ido = myarr(i, 2)

uu.idt = myarr(i, 3)

uu.ids = myarr(i, 4)

mydic.Add myarr(i, 1), uu

Set uu = Nothing

Next

[f:i].ClearContents: [f1:i1] = Array("名称", "序列4", "序列5", "序列6")

'回填过程中利用类属性取得数据

i = 2

For Each K In mydic.keys

Cells(i, "f") = K

Cells(i, "g") = mydic(K).ido + mydic(K).idt

Cells(i, "h") = mydic(K).idt + mydic(K).ids

Cells(i, "i") = mydic(K).idt * mydic(K).ids

i = i + 1

Next

Set mydic = Nothing

'获取排序的单元格区域,实现4字段排序

r = Sheets("67").Range("f1").CurrentRegion.Rows.Count

Set rngs = Sheets("67").Range(Cells(1, "f"), Cells(r, "i"))

For i = 9 To 6 Step -1

rngs.Sort key1:=Sheets("67").Range("f1").Offset(, i - 6), Order1:=xlAscending, Header:=xlYes

Next

End Sub

代码截图:

代码讲解:

1 上述代码实现了利用类作为键值的字典数据装载方案。Set uu = New myitem, uu.ido = myarr(i, 2),uu.idt = myarr(i, 3),uu.ids = myarr(i, 4)这里定义了类的三个属性,然后将uu赋给键值,提取数据的时候,就直接提取类的属性。数据回填后,要实现多字段关键字的排序,可是SORT排序只能实现3个关键字段的排序,这里是4个字段,我们就利用了循环来实现,每次实现一个关键字段的排序,这样就完成了多关键字段的排序。

2 For i = 1 To UBound(myarr)

Set uu = New myitem

uu.ido = myarr(i, 2)

uu.idt = myarr(i, 3)

uu.ids = myarr(i, 4)

mydic.Add myarr(i, 1), uu

Set uu = Nothing

Next

实现类和类属性的赋值,并装载字典。

2 Set rngs = Sheets("67").Range(Cells(1, "f"), Cells(r, "i"))

For i = 9 To 6 Step -1

rngs.Sort key1:=Sheets("67").Range("f1").Offset(, i - 6), Order1:=xlAscending, Header:=xlYes

Next

上述代码实现多字段排序,第一次RAGNE("F1")向右3个单元格后的关键字段,第二次RAGNE("F1")向右2个单元格后的关键字段,第三次RAGNE("F1")向右1个单元格后的关键字段,第一次RAGNE("F1")向右0个单元格后的关键字段,这样就实现了四个关键字段的排序。

下面我们看代码运行:

今日内容回向:

1 如何实现四个关键字段的排序?

2 将类赋值给键值的方案是否理解呢?

标签: #排序的关键字段有哪些