ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: hongsea312

[求助] VBA中字典数据的排序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-3-29 11:49 | 显示全部楼层
秋枫 发表于 2017-3-29 11:43
直接调用excel的排序命令啊。

在VBA中怎样调用呢? 谢谢!

TA的精华主题

TA的得分主题

发表于 2017-3-29 12:06 | 显示全部楼层
cczjw 发表于 2017-3-29 11:49
在VBA中怎样调用呢? 谢谢!

Range("A:H").Sort        key1, xlAscending, key2, ,xlAscending, , ,        xlYes

Sub Sort(Key1,Order1,Key2,Type,Order2,Key3,Order3,Header,OrderCustom,MatchCase,Orientation,SortMethod,DataOption1,DataOption2,DataOption3)

TA的精华主题

TA的得分主题

发表于 2017-3-29 12:07 | 显示全部楼层
' 本示例对工作表 Sheet1 上的单元格区域 A1:C20 进行排序,用单元格 A1 作为第一排序关键字,用单元格 B1 作为第二排序关键字。排序是按行以升序进行的,没有标题。本示例假定单元格区域 A1:C20 有数据存在。
Sub SortRange1()
   Worksheets("Sheet1").Range("A1:C20").Sort _
        Key1:=Worksheets("Sheet1").Range("A1"), _
        Key2:=Worksheets("Sheet1").Range("B1")
End Sub

TA的精华主题

TA的得分主题

发表于 2017-12-7 11:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
排序    很厉害

TA的精华主题

TA的得分主题

发表于 2018-10-11 14:22 | 显示全部楼层
fxl447098457 发表于 2016-11-11 12:57
他这个的确可以排序的,我试了下。下面这个例子对数组ar去重后排序。利用了字典,最后得到的字符串arr1就 ...

大神,打扰了,请问如何修改,可以对数值进行排序呢
LG[$2%GYNP%K)FX{IIEC%[Q.png

TA的精华主题

TA的得分主题

发表于 2019-4-11 16:36 | 显示全部楼层
本帖最后由 xiaovba 于 2019-4-11 16:41 编辑
fxl447098457 发表于 2016-11-11 14:17
试试结果。看图说话

赞美!学习了!

请问可以实现Key对应吗?

即字典的值排序以后,key不变。比如原来的顺序是d(1)=2,d(2)=3,d(3)=0, 值排序以后0,2,3, 顺序变成d(3),d(1),d(2)。需要用到的是排序后的key。

请问如何写代码?谢谢!

TA的精华主题

TA的得分主题

发表于 2022-12-12 21:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
秋枫 发表于 2017-3-29 12:07
' 本示例对工作表 Sheet1 上的单元格区域 A1:C20 进行排序,用单元格 A1 作为第一排序关键字,用单元格 B1  ...

dd.jpg


  1. Sub del()
  2.    Dim Dict As Dictionary
  3.        Set Dict = New Dictionary
  4.    Dim Rng As Range, Arr
  5.        Set Rng = Sheet1.Cells(6, 1).CurrentRegion
  6.        Set Rng = Rng(4, 1).Resize(9, 10)
  7.        Debug.Print Rng.Address
  8.        Rng.Select
  9.        Rng.Sort key1:=Sheet1.Range("C4")
  10.        Stop
  11.    For ii = 1 To Rng.Rows.Count
  12.         Set Dict(Rng(ii, 2)) = Rng(ii, 1)
  13.    Next ii
  14.    For ii = 0 To Dict.Count - 1
  15.       Set Rng = Dict.Items(ii)
  16.       Debug.Print Rng.Address
  17.    Next ii
  18. End Sub
复制代码



TA的精华主题

TA的得分主题

发表于 2022-12-13 06:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
fxl447098457 发表于 2016-11-11 14:17
试试结果。看图说话

谢谢你的方法

要做测试字典+Range的排序。排序必须保证单元格的结构不变。

TA的精华主题

TA的得分主题

发表于 2022-12-13 08:50 | 显示全部楼层
fxl447098457 发表于 2016-11-11 14:17
试试结果。看图说话

做了以下测试

       Str = Ojs.Eval("[""" & Join(Dict.Keys, """, """) & """].sort()")
       Debug.Print Str
       Str = "[""" & Join(Dict.Keys, """, """) & """].sort()"
       Debug.Print Str
       Str = Ojs.Eval(Str)
       Debug.Print Str
       Stop

结果如下

3,6,7,8,你,我,欣慰
["我", "6", "8", "你", "7", "欣慰", "3"].sort()
3,6,7,8,你,我,欣慰


按照思路又从新做了一边测试代码。

  1. Sub del()
  2.    Dim Dict As Dictionary, Ojs As ScriptControl
  3.    Dim Arr, ii, jj, Str
  4.        Set Dict = New Dictionary
  5.        Set Ojs = New ScriptControl
  6.        Arr = [{"我",6,8,6,"你",7,"欣慰",8,3}]
  7.        For ii = 1 To UBound(Arr)
  8.            Dict(Arr(ii)) = ""
  9.        Next ii
  10.        Ojs.Language = "JScript"
  11.        Arr1 = Split(Ojs.Eval("[""" & Join(Dict.Keys, """, """) & """].sort()"), ",")
  12.        Str = Ojs.Eval("[""" & Join(Dict.Keys, """, """) & """].sort()")
  13.        Debug.Print Str
  14.        Str = "[""" & Join(Dict.Keys, """, """) & """].sort()"
  15.        Debug.Print Str
  16.        Str = Ojs.Eval(Str)
  17.        Debug.Print Str
  18.        Stop
  19. End Sub
复制代码

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-20 09:36 , Processed in 0.043863 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表