加载中…
个人资料
Excel大全_方骥
Excel大全_方骥 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:8,411
  • 关注人气:2,664
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VBA中实现数组排序的多种方法

(2012-01-18 15:43:48)
标签:

javascript

sort

arraylist

sortedlist

排序

it

分类: ExcelVBA程序

VBA里面没有现成的Sort方法可以使用,在ExcelVBA里面要对数组进行排序,现有的通常做法:
1
,通过单元格赋值以后利用工作表里的Sort方法进行排序,
2
,通过SQL实现,也需要调用单元格区域存放数据,
3
,直接写循环语句通过算法来实现。

除了上述方法以外,借助一些其他语言工具与VBA相结合,也能利用现成的排序功能来实现数组排序,而不需要借助表格。
例如JavaScript

JavaScript
里面也有Sort方法,可以拿来现成使用,示例代码如下:

1.  Sub 文本升序()

2.  Set js = CreateObject("msscriptcontrol.scriptcontrol")

3.  js.Language = "javascript"

4.  arr = Application.Transpose(Range("A1:A10"))

5.  temp = Join(arr, ",")

6.  js.addcode "function aa(bb){js=bb.split(',');js.sort();return js;}"

7.  sortarr = js.eval_r("aa('" & temp & "')")

8.  Debug.Print sortarr

9.  End Sub

 

1.  Sub 文本降序()

2.  Set js = CreateObject("msscriptcontrol.scriptcontrol")

3.  js.Language = "javascript"

4.  arr = Application.Transpose(Range("A1:A10"))

5.  temp = Join(arr, ",")

6.  js.addcode "function aa(bb){js=bb.split(',');js.sort();js.reverse();return js;}"

7.  sortarr = js.eval_r("aa('" & temp & "')")

8.  Debug.Print sortarr

9.  End Sub

 

1.  Sub 数值升序()

2.  Set js = CreateObject("msscriptcontrol.scriptcontrol")

3.  js.Language = "javascript"

4.  arr = Application.Transpose(Range("A1:A10"))

5.  temp = Join(arr, ",")

6.  js.addcode "function aa(bb){js=bb.split(',');js.sort(function(a,b){return a-b;});return js;}"

7.  sortarr = js.eval_r("aa('" & temp & "')")

8.  Debug.Print sortarr

9.  End Sub

 

1.  Sub 数值降序()

2.  Set js = CreateObject("msscriptcontrol.scriptcontrol")

3.  js.Language = "javascript"

4.  arr = Application.Transpose(Range("A1:A10"))

5.  temp = Join(arr, ",")

6.  js.addcode "function aa(bb){js=bb.split(',');js.sort(function(a,b){return a-b;});js.reverse();return js;}"

7.  sortarr = js.eval_r("aa('" & temp & "')")

8.  Debug.Print sortarr

9.  End Sub

 


.NET里面有SortedList类也可以用来实现排序,但需要系统支持Framework

 

1.  Sub Sortlist()

2.  Set objSortedlist = CreateObject("System.Collections.Sortedlist")

3.  For i = 1 To 10

4.  objSortedlist.Add Range("A" & i).Value, Range("A" & i).Value

5.  Next i

6.  For i = 0 To objSortedlist.Count - 1

7.      Debug.Print objSortedlist.GetKey(i)

8.  Next

9.  End Sub




除了SortedList类,还有ArrayList也可以用

 

1.  Sub Arraylist()

2.  Set objArrayList = CreateObject("System.Collections.ArrayList")

3.  For i = 1 To 10

4.  objArrayList.Add Range("A" & i).Value

5.  Next i

6.  objArrayList.Sort

7.  For i = 0 To objArrayList.Count - 1

8.      Debug.Print objArrayList(i)

9.  Next

10. End Sub



还有其他什么好方法,欢迎大家支招。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有