我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
学到很多东西的诀窍 ,就是一下子不好学很多东西。——洛克 今日分享VBA程序中,数组是很重要的一部分,经常会用到。有时我们需要对数组中的元素进行排序,但是Excel中并没有提供一种现成的方法对数组进行排序,如果不考虑运行速度的话,我们完全可以采用一种变通的方法,把数组导出到Excel表中,利用内置命令排好序后再读取到数组中去。
如下:
代码如下:
'1、利用工作表内置的排序命令Sub test1() Dim arr arr = Range("a1:a25") Range("b1:b25") = arr Range("b1:b25").Sort Cells(1, 2), xlAscending arr = Range("b1:b25")' Range("b1:b25").ClearContentsEnd Sub
代码很简单,用的是Range对象的Sort方法。
但是如果对速度有要求的话,通常最好是编写一段排序的程序。
实现排序的方法有:冒泡排序法、快速排序法、计数排序法。
今天我们介绍下冒泡排序法。
先来看下冒泡排序法的原理:
比如有一组数据:
5,3,2,4,1,要按升序排列成1,2,3,4,5。
通过两两比较大小的方法决定是否要交换位置,最终得出正确的顺序。
如下:
首先第一个位置和第二个位置上的数字比较,5>3,所以两个数字要交换位置,然后比较第二个位置和第三个位置上的数字,5>2,交换位置,接着比较第三个位置和第四个位置上的数字,5>4,交换位置,再接着比较第四个位置和第五个位置上的数字,5>1,交换位置。这样,第一轮比赛就完成了,数组中最大的一位数字就排到数组中最后一位了。
接着进行第二轮比较,还是从数组中第一位开始,第一位数字和第二位数字比较,第二位和第三位数字比较,……,因为第一轮结束后,最大的一位数字已经移动到最后了,所以依次比较只需要进行到第三位和第四位,也就是位置一和位置二比较,位置二和位置三比较,位置三和位置四比较。
第二轮结束后,第二位最大值也归位了。
接着进行第三轮……
每进行一轮,该轮内部的比较次数便少一次。
每轮比较后情况如下:
A列为原来的数据列,经过4轮比较后得出正确的序列,每一轮中比较次数依次是4,3,2,1,所以完成该排序经过了4+3+2+1=10次数字的两两比较。
如果把这些数字比作水泡的话,经过比较,大的数字就逐渐冒到序列的尾部了,故叫做冒泡排序法。
代码如下:
Sub test2() Dim arr, i%, j%, temp% arr = Range("a1:a5") For i = 1 To 4 '一共要比较4轮(N-1) For j = 1 To 5 - i '每一轮需要比较的次数 If arr(j, 1) > arr(j + 1, 1) Then temp = arr(j, 1) arr(j, 1) = arr(j + 1, 1) arr(j + 1, 1) = temp End If Next j Next iEnd Sub
以上便是冒泡排序法的原理。
思考:
比如:5,2,1,3,4,这一组数据,经过第一轮比较后,
排列成:2,1,3,4,5,其实3,4,5已经是按顺序排列了,第二轮排序还需要三次两两比较吗?该怎么优化代码?我们下节继续。
本节的分享就到这里,祝大家每天都有进步。
成为米宏office学堂终身会员有啥好处:
1、米宏云课堂的视频永久免费观看
2、日后录制的视频可以免费观看
3、视频中不懂的可以提问
4、公众号中4个目录中的文章对应的素材可以免费获得
5、可以帮助解决视频中未提到,文章中未写到的典型问题
期待真心想提高office水平的朋友,非诚勿扰!点击,发现惊喜哦!