1.8 解决VBA数组排序到VB.NET的平稳过渡

515 次浏览

小目标

学会使用VSTO880框架进行数组排序

视频讲解

1.8 解决VBA数组排序到VB.NET的平稳过渡

VB.NET中一维数组排序

直接使用 array.sort 比VBA中方便
Brr=array.sort(arr)

VSTO880框架中VB.NET一维数组排序函数

file
有很多同学之前使用的是VBA175例中提供的排序函数,那么在引入Excel880VSTO框架后可继续使用 代码不用修改
Dim brr = ArraySortOne(arr, 0) '升序
另外我新增了自定义排序

'自定义排序
        brr = ArraySortOne(arr, 0)
        brr = ArraySortOne自定义(brr, {5, 1, 9})
        Debug.Print(Join(brr, ","))

VSTO880框架中的VB.NET二维数组排序函数

二维数组排序在.NET中没有直接支持,需要自己写代码实现,对基础不太好的同学就比较难了,这里我在Excel880VSTO框架中把VBA175例数组排序模块移植了过来,可以继续方便的使用排序函数无需关心实现细节。
file
file

Dim Sheet4 = Sheets("多列排序")
        Dim rng = Range("A1").CurrentRegion
        Dim arr = Intersect(rng, rng.Offset(1)).Value '去掉首行
        '第2列升序 空值排后面 与系统排序表现一致
        Dim brr = ArraySortTwo(arr, 2, EnumSortType.SortSheetASC)
        Sheet4.Range("K2").Resize(Ubound(brr), Ubound(brr, 2)).value = brr

        '第2列升序 空值排前面
        brr = ArraySortTwo(arr, 2, SortASC)
        Sheet4.Range("K2").Resize(Ubound(brr), Ubound(brr, 2)).value = brr

        '第2列降序
        brr = ArraySortTwo(arr, 2, SortDESC)
        Sheet4.Range("K2").Resize(Ubound(brr), Ubound(brr, 2)).value = brr

数组自定义排序

这里依然为大家增加了自定义排序函数 直接调用即可
file

Sub 二维数组自定义排序()
        Dim Sheet4 = Sheets("多列排序")
        Dim rng = Range("A1").CurrentRegion
        Dim arr = Intersect(rng, rng.Offset(1)).Value '去掉首行
        '第3列自定义排序
        Dim 序列 = {"K", "J", "G", "M"}
        Dim brr = ArraySortTwo(arr, 3, EnumSortType.SortASC) '先升序
        brr = ArraySortTwo自定义(brr, 3, 序列)
        Sheet4.Range("K2").Resize(Ubound(brr), Ubound(brr, 2)).value = brr

    End Sub

作业:实现工作表排序

使用Excel880VSTO数组排序函数,在功能区实现一个工作表排序按钮
提示:获得工作表数组 进行排序 然后 依次移动到第一个工作表前

郑广学VSTO教程购买方式

淘宝下单地址(支持花呗)
郑广学VSTO课程云课堂网址
登陆后可免费试学