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

相关推荐

  • 抖音刷赞免费,抖音刷赞推广网站

    技术抖音刷赞免费,抖音刷赞推广网站抖音刷赞免费,抖音刷赞推广网站
    情绪不稳定哪只我一个,经常刷到“某某某崩溃大哭”的文章,就知道现代人的生活情绪有多不稳定。
    抖音刷赞神器免费版app
    他哑口无言,默默离开了办公室,然后

    测评 2021年11月13日
  • pytorch 训练集尺寸必须一致吗(pytorch如何防止加载模型改变参数)

    技术torch.nn.ModuleList有什么用本篇内容主要讲解“torch.nn.ModuleList有什么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“torch.n

    攻略 2021年12月21日
  • 澳大利亚旅游得多少钱,去澳大利亚旅游要花多少钱

    技术澳大利亚旅游得多少钱,去澳大利亚旅游要花多少钱我想你悉尼和墨尔本这两个最著名的城市肯定是要去的吧。如果是穷游,可以在城内不采用交通工具,完全靠走。吃和住弹性都比较大,自己选择适合自己价位的酒店就行,如果不介意的话去超

    生活 2021年10月25日
  • 如何使用JavaScript定义自己的ajax函数

    技术如何使用JavaScript定义自己的ajax函数这篇文章将为大家详细讲解有关如何使用JavaScript定义自己的ajax函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。由于用

    攻略 2021年11月24日
  • 选择物联网数据库的5个步骤分别是什么

    技术选择物联网数据库的5个步骤分别是什么选择物联网数据库的5个步骤分别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。企业应该通过了解其数据、功能需求以

    攻略 2021年12月2日
  • 个人面试小总结之一

    技术个人面试小总结之一 个人面试小总结之一基础
    值传递和引用传递的区别
    值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,那么我们的实际参数不会改变
    引用传递:指在调

    礼包 2021年12月5日