【转载】EXCEL VBA 自定义排序的三种方法

技术【转载】EXCEL VBA 自定义排序的三种方法 【转载】EXCEL VBA 自定义排序的三种方法何谓自定义排序,就是按指定的顺序对数据源进行排序呗。共分享了三种方法:
第1种方法是系统自带的Ord

[转载]EXCEL VBA自定义排序的三种方法

什么是用户定义的排序意味着按照指定的顺序对数据源进行排序。

分享了三种方法:

第一种方法是系统自带的OrderCustom。它的优点是代码简洁,但缺点是自定义序列有字符长度限制(255个字符)。

第二种方法是字典数组设置序号,然后用辅助列排序。优点是不会破坏细胞的形态和结构,比如公式、背景等等。

第三种方法是只使用字典数组和简单的桶排序技术直接对数组中的数据进行排序。优点是效率高,缺点是会破坏细胞结构,比如消除公式。

(第一个建议是掌握,第二个建议是理解,第三个.能看懂就看懂,看不懂就留在那里~)

比如说。

如下图所示,A:C列为数据源。

现在需要按照e列中指定的部门顺序对数据源进行重新排序,如果部门不在指定的顺序中,就会放在数据源的末尾。

子自定义排序1()

Eh技术论坛VBA编程学习与实践看星光

调光范围

设置rng=范围(' e2:e '单元格(行。数数,‘e’)。结束(xlUp)。行)

申请。添加自定义列表(rng)

添加自定义序列,它不仅支持单元格对象,还支持数组。

n=应用。自定义列表计数

自定义序列的数量

范围(' a:c ')。Sort key1:=[a1],order 1:=Xl升序,HEADER:=xlYes,ordercustom:=n 1

使用自定义排序,ordercustom指定使用哪个自定义序列排序。

使用自定义排序时,需要将OrderCustom参数设置为自定义列表中指定序列的顺序加1。

申请。删除自定义列表n

删除新添加的自定义序列

末端接头

子自定义排序2()

作为对象,r,I,arr,brr

set d=CreateObject(' ing . dictionary ')

r=范围(' e2:e '单元格(行。数数,‘e’)。结束(xlUp)。行)。价值

对于i=1至Ubund(r)

D(r(i,1))=i '目标序列循环加载到字典中,以序列号为项目。

然后

arr=范围(' a2:c '单元格(行。计数,1)。结束(xlUp)。行)

数据源加载数组arr

ReDim brr(1到UBound(arr),1到1)

按照指定的顺序声明数组brr原始部门的序列号。

对于i=1至UBound(arr)

如果d存在(arr(i,1)),那么

Brr(i,1)=d(arr(i,1))‘将指定序列中原始部门的序列号装入Brr。

其他

Brr(i,1)=“指定的序列不存在”

如果…就会结束

然后

[d:d]。插入

在d列中插入一列。

[d2]。调整大小(UBound(brr),1)=brr

新的序列号放在d列。

范围(' a:d ')。Sortkey1:=[D1],Order1:=XLAscending,Header3360=XLYES按升序进行列排序。

[d:d]。删除'删除列d

设置d=无

末端接头

子自定义排序3()

Eh科技论坛微信官方账号VBA编程学习与实践看星光

作为对象,I,n,x,k,j

Dim r,arr,brr,crr

set d=CreateObject(' ing . dictionary ')

晚装词典

r=范围(' e2:e '单元格(行。数数,‘e’)。结束(xlUp)。行)。价值

对于i=1至Ubund(r)

D(r(i,1))=i '目标序列循环加载到字典中,以序列号为项目。

然后

arr=范围(' a2:c '单元格(行。计数,1)。结束(xlUp)。行)

数据源加载数组

1到d计数1,1到1

Brr数组用于根据序列号加载数组arr的行号,类似于桶排序桶。

对于i=1至UBound(arr)

如果d存在(arr(i,1)),那么

如果字典里有相关的部门.

n=d(arr(i,1))

指定序列中部门的序列号。

brr(n,1)=brr(n,1)',' I

将arr中部门的行号加载到对应于阵列brr的序列号行中。

其他

brr(UBound(brr),1)=brr(UBound(brr),1)',' I

如果字典中不存在,请将其放在数组brr的最后一行。

如果…就会结束

然后

雷迪姆crr(1至UBound(arr),1至UBound(arr,2))

数组crr放置排序的结果。

对于i=1至UBound(brr)

如果brr(i,1)' '那么

如果不为空,则有符合指定排序标准的关键字。

r=拆分(brr(i,1),',')

取出存储在brr这个位置的行号。

对于x=1至Ubund(r)

k=k ^ 1 '累计行

对于j=1至UBound(arr,2)

crr(k,j)=arr(r(x),j)

遍历指定行位置的数组arr的值移动到crr。

然后

然后

如果…就会结束

然后

范围(' a2:c '单元格(行。计数,1)。结束(xlUp)。行)=crr

将数组crr的排序结果放回单元格区域。

“Set=nothing”释放字典

擦除arr:擦除brr:擦除crr

'释放数组'

末端接头

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/88685.html

(0)

相关推荐

  • kafka新版常用命令有哪些

    技术kafka新版常用命令有哪些这篇文章将为大家详细讲解有关kafka新版常用命令有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1/列出topic的命令为:kafka-topic

    攻略 2021年11月21日
  • PostgreSQL如何实现自动更新时间戳

    技术PostgreSQL如何实现自动更新时间戳这篇文章主要介绍PostgreSQL如何实现自动更新时间戳,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是PostgreSQL时间戳数据类型?在P

    攻略 2021年11月24日
  • 怎么用EthMon.php监听以太坊代币转账交易

    技术怎么用EthMon.php监听以太坊代币转账交易怎么用EthMon.php监听以太坊代币转账交易,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。EthMo

    攻略 2021年10月23日
  • C++为什么在默认状态下明确定义单参数构造函数

    技术C++为什么在默认状态下明确定义单参数构造函数本篇内容介绍了“C++为什么在默认状态下明确定义单参数构造函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情

    攻略 2021年11月29日
  • 手机牌子,打算买个手机,什么牌子好呢

    技术手机牌子,打算买个手机,什么牌子好呢感谢您的阅读!【价格2000-3000手机牌子,什么品牌的手机是可以去考虑的呢】我们在购买手机的时候一定会考虑到价格,而价格因素一定会影响我们对于手机的选择。那么在2000~300

    生活 2021年10月31日
  • MySQL如何删除多表关联

    技术MySQL如何删除多表关联这篇文章主要介绍MySQL如何删除多表关联,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 在MySQL中,删除关联的多张表,可以使用下面S

    攻略 2021年10月30日