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

相关推荐

  • 什么动物和植物像鸡,像蚕一样生命短暂的动物或植物

    技术什么动物和植物像鸡,像蚕一样生命短暂的动物或植物无脊椎动物草履虫和变形虫的寿命是以昼夜或小时来计算的什么动物和植物像鸡,它们的寿命最多是一昼夜。脊椎动物中,寿命最短的是弹涂鱼,这种身长才几厘米的小鱼,寿命不到一年。昆

    生活 2021年10月22日
  • 化妆技巧初学化妆,学化妆的正确方法和技巧

    技术化妆技巧初学化妆,学化妆的正确方法和技巧化妆第一部,洗脸,然后擦干,油皮简单的来个爽肤水就行,干皮护肤品全套使用化妆技巧初学化妆。凉一会让脸上的护肤品吸收吸收。接着就是隔离防晒,我一般喜欢用带防晒的隔离。用手指整个脸

    生活 2021年10月23日
  • 如何理解Java设计模式的代理模式

    技术如何理解Java设计模式的代理模式这篇文章将为大家详细讲解有关如何理解Java设计模式的代理模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、代理模式定义  为其

    攻略 2021年10月23日
  • 大数算法的总结

    技术大数算法的总结 大数算法的总结目录:前言大数加法大数减法大数乘法大数除法大数阶乘位数大数阶乘求解总结一.前言.众所周知,计算机数据类型的长度是有限的,因此在处理较大的数据时候会发生数据溢出,此时聪明

    礼包 2021年11月11日
  • jquery中如何让一个元素隐藏

    技术jquery中如何让一个元素隐藏本篇内容介绍了“jquery中如何让一个元素隐藏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够

    攻略 2021年11月15日
  • HBase怎么设计rowkey

    技术HBase怎么设计rowkey这篇文章主要为大家展示了“HBase怎么设计rowkey”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HBase怎么设计rowkey”这篇文

    攻略 2021年12月8日