【转载】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)

相关推荐

  • 手把手带你刷二叉树,第一期)

    技术手把手带你刷二叉树,第一期) 手把手带你刷二叉树(第一期)https://labuladong.gitee.io/algo/2/18/21/读完本文,你不仅学会了算法套路,还可以顺便去 LeetCo

    礼包 2021年11月12日
  • php如何实现记录分页

    技术php如何实现记录分页这篇文章将为大家详细讲解有关php如何实现记录分页,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 php实现记录分页的思路:1、获

    攻略 2021年12月10日
  • Hadoop命令的使用分析

    技术Hadoop命令的使用分析这篇文章给大家介绍Hadoop命令的使用分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Hadoop命令所有的hadoop命令均由bin/hadoop脚本引发。不指定

    攻略 2021年11月12日
  • mysql中的语句注释方法有哪些

    技术mysql中的语句注释方法有哪些这篇文章给大家分享的是有关mysql中的语句注释方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 mysql> SELE

    攻略 2021年11月1日
  • dubbo可以支持哪些注册中心(dubbo的注册中心有哪些类型)

    技术Dubbo注册中心是怎么设计的本篇内容主要讲解“Dubbo注册中心是怎么设计的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Dubbo注册中心是怎么设计的”吧!关于源码和

    攻略 2021年12月15日
  • 快速排序平均时间复杂度O(nlogn)的推导

    技术快速排序平均时间复杂度O(nlogn)的推导 快速排序平均时间复杂度O(nlogn)的推导快速排序作为随机算法的一种,不能通过常规方法来计算时间复杂度,本文记录了一种推导方法快速排序作为随机算法的一

    礼包 2021年11月13日