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