excel数组排序函数,excel怎么一键排序

首页 > 职场 > 作者:YD1662023-04-14 20:02:12

VBA编程中,除了使用字典外,同样也会大量使用到数组。数组其实也不难,前面的文章中讲到了字典,其实你也是可以把它当成一个二维数组来看待的,只是字典的操作更加简洁,更容易理解,也更容易上手。

不管是字典,还是数组,其中一个最大的难题便是排序。我们在对数据处理的时候,肯定需要对数据进行排序的,以便筛选需要的数据。下面提供一个VBA中的自定义函数,它是一个通用的排序函数,可以做到拿来便用。

Function Array_Sort(Array_, Key1, Order) '(Array_[将要排序的数组], Key1[垂直数组(y,x)中x,像表格中的哪一列作关键字], Order[=1,升序;<>1,降序]) Dim t, x&, y&, i&, j&, k&, xx&, yy&, tt&, AD& For i = 1 To 60 On Error Resume Next Err.Clear tt = UBound(Array_, i) If Err.Number = 9 Then AD = i - 1: Exit For 'AD,数组维数 Next If AD = 2 Then If Not (Key1 >= LBound(Array_, 2) And Key1 <= UBound(Array_, 2)) Then Exit Function ElseIf AD = 1 Then Array_ = Application.Transpose(Array_) Key1 = 1 Else Exit Function End If y = LBound(Array_, 1): x = LBound(Array_, 2) yy = UBound(Array_): xx = UBound(Array_, 2) If Order = 1 Then '升序 For i = y To yy - 1 For j = i 1 To yy If Array_(j, Key1) < Array_(i, Key1) Then '冒泡排序法 For k = x To xx t = Array_(j, k): Array_(j, k) = Array_(i, k): Array_(i, k) = t Next End If Next Next Else '降序 For i = y To yy - 1 For j = i 1 To yy If Array_(j, Key1) > Array_(i, Key1) Then For k = x To xx t = Array_(j, k): Array_(j, k) = Array_(i, k): Array_(i, k) = t Next End If Next Next End If If AD = 2 Then Array_Sort = Array_ Else Array_Sort = Application.Transpose(Array_) End Function

自定义函数中有三个参数,其中,Array_[将要排序的数组], Key1[垂直数组(y,x)中x,像表格中的哪一列作关键字], Order[=1,升序;<>1,降序]

然后另外要强调的是,该自定义函数仅只能用于一维数组和二维数组。

下面举几个简单的例子来说明它的用法。

对一维数组的排序

Private Sub hong1_Click() Dim arr(1 To 5) '一维数组 For i = 1 To 5 arr(i) = [int(rand()*100) 1] Next [a1].Resize(1, 5) = arr brr = Array_Sort(arr, 1, 1) '详见自定义函数Array_Sort使用 [a2].Resize(1, 5) = brr End Sub

先对代码稍加解释一下:

Dim arr(1 To 5),首先定义一个一维数组

然后我们给数组随机赋值

[a1].Resize(1, 5) = arr,我们把数组填充到A1:E1

brr = Array_Sort(arr, 1, 1),然后通过自定义函数对原有的数组进行排序,并赋值给新数组

[a2].Resize(1, 5) = brr,排序后的结果填充到A2:E2

运行结果如下:

excel数组排序函数,excel怎么一键排序(1)

一维数组排序结果

对二维数组的排序

与一维数组相比较,唯一不同的点自定义函数中的Key,它可以是第一维,也可以是第二维,或者第三维。

如下面的代码,以第三维按降序排列。

Private Sub hong2_Click() Dim arr(1 To 5, 1 To 3) '二维数组 For i = 1 To 5 arr(i, 1) = [int(rand()*100) 1] arr(i, 2) = [int(rand()*100) 1] arr(i, 3) = [int(rand()*100) 1] Next [a4].Resize(5, 3) = arr brr = Array_Sort(arr, 3, 0) [f4].Resize(5, 3) = brr End Sub

运行结果如下图:

excel数组排序函数,excel怎么一键排序(2)

二维数组排序结果

如果以第二维按升序排列的话,只要修改自定义函数中的Key和Order即可。

brr = Array_Sort(arr, 1, 1)

运行结果如下:

excel数组排序函数,excel怎么一键排序(3)

二维数组排序结果

通过以上自定义函数,我们便能轻松的完成数组的排序了。建议收藏,直接拿来使用。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.