从字典中提取数据后如何实现多字段排序(如何从字典里提取多个值)
导语:从字典中提取数据后,如何实现多字段排序
大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第67讲内容:从字典中提取数据后,实现多字段排序
关于排序,我先后讲了乱序排序,自定义排序等特殊的排序方法,这些是工作中必不可少的,希望大家好好利用。今日讲多关键字段排序,也就是说排序要求实现按三个以上字段来进行。我们在前面的讲解中知道SORT排序只能实现三个字段,如何实现四个及以上的方案呢?今日我们就以4个字段为例讲解一下如何实现。
实例,下面数据中A列是城市的名称,后面是三列数据,我们要实现每个城市的新的3个数据计算,回填到指定区域。并实现按&34;&34;&34;&34;的四个字段的先后排序。如何实现呢?
思路分析:在提取数据时候,我们用将类赋值给键值的方案,没有熟悉这方面内容的朋友要看看我之前的文章再学习一下有关将类作为键值的方法。我们将A列的数据作为键,把B,C,D列的内容作为键值的属性来处理。在数据回填的时候,可以直接进行运算,并回填。在实现多关键字排序的时候,我们利用从后往前多次排序的方案,考虑用一个循环来解决,由于用到多个关键字段,可以考虑用Offset函数。下面看我给出的代码:
Sub mynzsz_67() &34;67&34;a2:d&34;a1&34;Scripting.Dictionary&39;将数据装入字典,键值是类,利用类的属性完成字典数据的赋值
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(&34;, &34;, &34;, &34;)
&34;f&34;g&34;h&34;i&39;获取排序的单元格区域,实现4字段排序
r = Sheets(&34;).Range(&34;).CurrentRegion.Rows.Count
Set rngs = Sheets(&34;).Range(Cells(1, &34;), Cells(r, &34;))
For i = 9 To 6 Step -1
rngs.Sort key1:=Sheets(&34;).Range(&34;).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(&34;).Range(Cells(1, &34;), Cells(r, &34;))
For i = 9 To 6 Step -1
rngs.Sort key1:=Sheets(&34;).Range(&34;).Offset(, i - 6), Order1:=xlAscending, Header:=xlYes
Next
上述代码实现多字段排序,第一次RAGNE(&34;)向右3个单元格后的关键字段,第二次RAGNE(&34;)向右2个单元格后的关键字段,第三次RAGNE(&34;)向右1个单元格后的关键字段,第一次RAGNE(&34;)向右0个单元格后的关键字段,这样就实现了四个关键字段的排序。
下面我们看代码运行:
今日内容回向:
1 如何实现四个关键字段的排序?
2 将类赋值给键值的方案是否理解呢?
本文内容由小涵整理编辑!