Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3542|回复: 8

[已解决]怎么用VBA对A列数据根据字符长度来在D列排序出来

[复制链接]
发表于 2012-5-16 22:03 | 显示全部楼层 |阅读模式
怎么用VBA对A列数据根据字符长度来在D列排序出来
Book1.zip (24.97 KB, 下载次数: 31)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-5-16 22:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lisachen 于 2012-5-16 22:27 编辑

  1. Sub 选择排序()
  2.   Dim arr, temp, x, y, t, iMax, k, k1, k2
  3.   arr = Range("a1:a50")
  4.   For x = UBound(arr) To 1 + 1 Step -1
  5.      iMax = 1
  6.      For y = 1 To x
  7.           If Len(arr(y, 1)) > Len(arr(iMax, 1)) Then iMax = y
  8.      Next y
  9.      temp = arr(iMax, 1)
  10.      arr(iMax, 1) = arr(x, 1)
  11.      arr(x, 1) = temp
  12.   Next x
  13.   Range("d1").Resize(UBound(arr)) = ""
  14.   Range("d1").Resize(UBound(arr)) = arr
  15. End Sub
复制代码

Book1.rar

25.85 KB, 下载次数: 35

回复

使用道具 举报

 楼主| 发表于 2012-5-16 22:38 | 显示全部楼层
lisachen 发表于 2012-5-16 22:26

{:171:} 要是后面带说明就更好了,这样就容易理解学习了
回复

使用道具 举报

 楼主| 发表于 2012-5-16 22:47 | 显示全部楼层
lisachen 发表于 2012-5-16 22:26

{:041:}那个顺序是从最长到最短怎么该,你这个是最短到最长的
回复

使用道具 举报

发表于 2012-5-16 22:51 | 显示全部楼层
sanculans 发表于 2012-5-16 22:47
那个顺序是从最长到最短怎么该,你这个是最短到最长的


Sub 选择排序()
  Dim arr, temp, x, y, t, iMax, k, k1, k2
  arr = Range("a1:a50")
  For x = UBound(arr) To 1 + 1 Step -1
     iMax = 1
     For y = 1 To x
          If Len(arr(y, 1)) < Len(arr(iMax, 1)) Then iMax = y
     Next y
     temp = arr(iMax, 1)
     arr(iMax, 1) = arr(x, 1)
     arr(x, 1) = temp
  Next x
  Range("d1").Resize(UBound(arr)) = ""
  Range("d1").Resize(UBound(arr)) = arr
End Sub


复制代码
  1. Sub 选择排序()
  2. Dim arr, temp, x, y, t, iMax, k, k1, k2
  3. arr = Range("a1:a50")
  4. For x = UBound(arr) To 1 + 1 Step -1
  5. iMax = 1
  6. For y = 1 To x
  7. If Len(arr(y, 1)) < Len(arr(iMax, 1)) Then iMax = y
  8. Next y
  9. temp = arr(iMax, 1)
  10. arr(iMax, 1) = arr(x, 1)
  11. arr(x, 1) = temp
  12. Next x
  13. Range("d1").Resize(UBound(arr)) = ""
  14. Range("d1").Resize(UBound(arr)) = arr
  15. End Sub
复制代码

回复

使用道具 举报

发表于 2012-5-17 00:33 | 显示全部楼层
学习数组用法                              
回复

使用道具 举报

发表于 2012-5-17 09:17 | 显示全部楼层
学习一下,谢谢               
回复

使用道具 举报

发表于 2012-5-17 09:37 | 显示全部楼层
学习了,多谢随缘版主,学习
回复

使用道具 举报

发表于 2012-5-17 13:08 | 显示全部楼层
本帖最后由 bluexuemei 于 2012-5-17 14:07 编辑
  1. Sub ruby()
  2. '须安装ACTIVERUBY.才能运行
  3. '下载地址  http://www.artonx.org/data/asr/ActiveRuby.msi
  4. Set ojs = CreateObject("scriptcontrol")
  5. ojs.Language = "rubyscript"
  6. ojs.eval "def aa(aa) $arr=aa.flatten! end"
  7. y = ojs.Run("aa", Sheet3.Range("A1", Sheet3.[a65536].End(3)).Value)
  8. y = ojs.eval("$arr.sort_by{|x|x.length}")
  9. Sheet3.[d1].Resize(UBound(y) + 1, 1) = Application.Transpose(y)
  10. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 13:24 , Processed in 0.296689 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表