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

相关推荐

  • 分类算法的性能指标(分类算法常见的性能指标有)

    技术Classification算法指标是什么本篇内容介绍了“Classification算法指标是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年12月21日
  • VB.NET转换形态的方法有哪些

    技术VB.NET转换形态的方法有哪些这篇文章将为大家详细讲解有关VB.NET转换形态的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。VB.NET经过长时间的发展,很多用户都很

    攻略 2021年12月1日
  • flume安装部署

    技术flume安装部署 flume安装部署flume安装部署
    flume下载地址 :http://archive.apache.org/dist/flume/
    这里用的flume版本是:apache-f

    礼包 2021年11月9日
  • 简述namenode工作机制(namenode的重要性是什么)

    技术Namenode HA 知识点有哪些这篇文章主要介绍“Namenode HA 知识点有哪些”,在日常操作中,相信很多人在Namenode HA 知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法

    攻略 2021年12月23日
  • 归并算法

    技术归并算法 归并算法归并算法采用了分而治之的思想,具体的内容懂的都懂,不懂的也不需要明白,看代码就完事了。
    public class guibing { public static int[]

    礼包 2021年12月9日
  • CSP-J 2021 题解

    技术CSP-J 2021 题解 CSP-J 2021 题解蒟蒻の得分
    作为一个学了一年多还只在入门组的高龄 \(OIer\),\(T1\) 居然写挂了……
    \(T1\) 是一道简单的数学题,考场上把问题

    礼包 2021年10月26日