暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

VBA 数组应用-冒泡排序(附源码)

匠工精神 2021-10-05
1874

之前货品的同事在处理买货及其实际售卖的分析报表时,帮忙处理过一些复杂的数据结构的逻辑,我们的货品有鞋、包、配饰三大分类,此结构用字典来存储,然后对每一个类型里的数据按照下单时间升序排序,此时用的是数组存储的。

在Excel中没有提供直接的方法或函数用于数组排序,因此若要使用VBA进行数组排序,则需要采用我们在数据结构与算法课程中学到的排序算法。在其他程序设计语言中,数组中的所有元素都必须为同一数据类型,而在 VBA 中,数组中各元素可以是相同的数据类型,也可以是不同的数据类型。

案例探索

我们在 Excel 中可以方便地对单元格区域中的数据进行排序。便于演示用,先使用 VBA 程序让用户输入 10 个数据,然后使用冒泡排序法对这 10 个数进行排序。在程序中处理大量数据时,使用数组来保存是比较好的方法。

代码如下:

Sub Sort_Order()

Dim i As Integer, j As Integer

Dim k

Dim s(10) As Integer

For i = 0 To 9

    s(i) = Application.InputBox("请输入10个数字", "输入", , , , , , 1)

Next

For i = 0 To 8

For j = i + 1 To 9

If (s(i) < (j)) Then

 temp = s(i)

 s(i) = s(j)

 s(j) = temp

 End If

 Next

 Next

 For Each k In s

 Debug.Print k

 Next

End Sub


VBA编程时inputbox 有两种用法,一个是inputbox函数,一个是application.inputbox方法,两者用法差不多,差别在后者多了输入类型,导致返回值也有很大不同。

1、inputbox函数在输入字符串后点击“确认”按钮返回字符串,如果需要数值,可以用val函数转换,点击“取消”则返回空字符串。其用法如下:

InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context]) 

该函数必须具有的参数是prompt,其它都是可选函数。


2、application.inputbox在输入字符串后点击“确认”按钮根据type类型返回不同类型的值,点击“取消”则返回逻辑值false,其用法如下:

application.inputbox(prompt,title,default,left,top,helpfile,helpcontextid,type)

同样也是prompt是必选参数,其它是可选参数。其中type为 0 返回文本,type为1返回数字 type为2返回公式,4 逻辑值 8单元格引用 16错误值  64数值数组。type不指定时,系统根据输入智能判断数据类型。

运行效果如下:



以上是带大家简单熟悉下数组的运用,最后附上我们实际应用的案例代码:

对字典的key排序处理。字典里value的排序则用上面的冒泡排序即可。

文章转载自匠工精神,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论