分享

将工作表按拼音排序 | VBA实例教程

 gblhp 2015-02-16

除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/449.html,VBA交流群273624828。

上节讲了数组的冒泡排序法,这次再来看一个例子。假设现在我有一个工作簿当中包含很多个工作表,工作表的名称都是一些汉字字符串,比如说城市名称,现在我要将这些工作表按表名拼音顺序重新排列。思路很简单,将所有工作表名按拼音排序,然后再按这个顺序移动工作表即可。按拼音排序一种方法可以将所有工作表名放了工作表中的一列,然后利用工作表的排序功能自动排序,简单明了。这里我们不用这种方法,而是用我们上节学过的冒泡排序法。

那么问题来了,怎样比较两个汉字字符串的大小呢,可以直接比较吗?经过验证答案是不行的,如果直接将两个字符串比较则比较的是Asc码的大小,不是按拼音排序的大小。这里介绍一个函数StrComp,其语法为StrComp(string1, string2, [compare]),其中第三个参数compare有三个值,这里只需要记住compare=vbtextcompare代表将String1和string2进行字符串比较,即汉字是按照拼音排序的。返回值如下

string1 小于 string2返回-1
string1 等于 string2 返回0
string1 大于 string2 返回1

下面来看代码:

Sub 按拼音排序()
Dim arr(), i, j, n, temp, flag As Boolean, m, sht, k
Cells.ClearContents
n = Sheets.Count
ReDim arr(n - 1)
m = 0
For Each sht In Sheets
arr(m) = sht.Name
m = m + 1
Next
arr = ArrSort(arr)
For k = n - 1 To 1 Step -1
Sheets(arr(k)).Move after:=Sheets(arr(0))
Next
End Sub

Function ArrSort(arr)  '按拼音排序函数
Dim i, j, flag, temp
flag = True
Do While flag = True
i = i + 1
flag = False
For j = 0 To UBound(arr) - i
If StrComp(arr(j), arr(j + 1), vbTextCompare) = 1 Then
flag = True
temp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = temp
End If
Next
Loop
ArrSort = arr
End Function

上面的代码先将所有的工作表名放到一个一维数组Arr中,然后对Arr执行冒泡排序,这里我将冒泡排序弄成了一个函数,方便以后调用。在移动工作表时,将排最前的表不动,然后从最大的表依次放到第一个表的后面,这样就实现了工作表的移动。

本节示例文件下载地址:http://pan.baidu.com/s/1dDGiMY1

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约