如何将多行多列单元格区域按照升序或者降序排列
来源:网络收集 点击: 时间:2024-05-171、 首先将开发工具显示在主菜单中:
打开一个文档,单击左上角【文件】——【选项】——【自定义功能区】在页面右侧框中找到【开发工具】,在其左侧复选框中打勾,点击确定,即可。这样,开发工具选项就出现在功能区中。如下图


1、 进入开发界面。
单击【开发工具】,可以在左侧看见【Visual Basic】,单击【Visual Basic】控件就进入VBA开发界面。单击【插入】——【模块】就进入编辑界面。


1、 新建子过程
单击【插入】——【过程】得到如下,名称中自己写喜欢的名字,如:过程排序——类型选择子过程(s)——单击【确定】


1、 编辑代码
然后代码如下:
arr1 = Selection ’运行前首先要选择需要排序的区域
x = UBound(arr1, 1)
y = UBound(arr1, 2)
Dim arr2()
For i = 1 To x
For j = 1 To y
ReDim Preserve arr2(1 To x, 1 To y)
m = (i - 1) * y + j
s = WorksheetFunction.Small(arr1, m) ’small函数按照升序排列,反之,large函数按照降序排列
arr2(i, j) = s
Next j
Next i
.Resize(x, y) = arr2 ’为指定目标位置
End Sub
5/71、 运行子过程
首先在工作表中选中需要排序的区域,然后在VB编辑界面中单击【F5】即可实现排序。如下:
特别注意:当然,为了方便操作,在代码编辑完成后可以添加一个控件,直接在工作表中操作。
依次点击【开发工具】——【插入】——表单控件中选择左上角的控制按钮。
然后单击过程排序,就可以实现。同时可以将按钮1 的名字改为自己喜欢的名字,如:给大爷排序
在工作表中选中需要排序的区域(这次选择A1~F6区域)再单击【给大爷排序】就可以实现。
不要忘记了,要将工作表另存为启用宏的工作簿(xlm),以后打开才能继续使用。




1、 通过函数过程实现
代码如下:
Public Function 函数排序(rng As Range) ’ 注意函数参数的类型
arr1 = rng
x = UBound(arr1, 1)
y = UBound(arr1, 2)
Dim arr2()
For i = 1 To x
For j = 1 To y
ReDim Preserve arr2(1 To x, 1 To y)
m = (i - 1) * y + j
s = WorksheetFunction.Small(arr1, m)
arr2(i, j) = s
Next j
Next i
函数排序 = arr2
End Function

1、 调用函数
选择指定位置的单元格区域(注意范围要和拟定排序的区域大小一致),然后在公式框直接输入=函数排序()在括号内选择需要排序的区域,然后同时按下【Ctrl+Shift+Enter】三键,即可实现效果。
例如:选择H12~M18区域作为存放结果的区域,然后在公式框输入=函数排(A1~F7),再按三键,即可实现。

两种方法的核心代码其实几乎是一样的。
不同之处在于,子过程需要在代码中提前指定存放结果的单元格位置,而函数则可以在输入公式之前再选择目标区域。
代码还可以进一步简化,希望多多交流。
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_784741.html