Excel精英培训网

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

[已解决]按字数多少排序的VBA

[复制链接]
发表于 2014-10-19 19:11 | 显示全部楼层 |阅读模式
请问大侠:如何用VBA实现按单元格内的字数多少排序?谢谢!
最佳答案
2014-10-19 19:33
KDZ 发表于 2014-10-19 19:18
请问怎么搞法?
  1. Sub demo()
  2.     Dim arr, temp, x, y, t, k, i, a
  3.     a = Sheet1.Cells(Rows.Count, 2).End(xlUp).Row
  4.     arr = Range("a2:b" & a)
  5.     For x = 1 To UBound(arr) - 1
  6.         For y = x + 1 To UBound(arr)
  7.             For i = 1 To 2
  8.                 If Len(arr(x, 2)) < Len(arr(y, 2)) Then
  9.                     temp = arr(x, i)
  10.                     arr(x, i) = arr(y, i)
  11.                     arr(y, i) = temp
  12.                 End If
  13.             Next
  14.         Next
  15.     Next
  16.     Range("d2").Resize(x, 2) = ""
  17.     Range("d2").Resize(x, 2) = arr
  18. End Sub
复制代码
Book1.rar (10.01 KB, 下载次数: 18)

Book1.rar

4 KB, 下载次数: 10

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-10-19 19:17 | 显示全部楼层
加个辅助列算长度,按这个排序不就成了?
回复

使用道具 举报

 楼主| 发表于 2014-10-19 19:18 | 显示全部楼层
上清宫主 发表于 2014-10-19 19:17
加个辅助列算长度,按这个排序不就成了?

请问怎么搞法?
回复

使用道具 举报

发表于 2014-10-19 19:33 | 显示全部楼层    本楼为最佳答案   
KDZ 发表于 2014-10-19 19:18
请问怎么搞法?
  1. Sub demo()
  2.     Dim arr, temp, x, y, t, k, i, a
  3.     a = Sheet1.Cells(Rows.Count, 2).End(xlUp).Row
  4.     arr = Range("a2:b" & a)
  5.     For x = 1 To UBound(arr) - 1
  6.         For y = x + 1 To UBound(arr)
  7.             For i = 1 To 2
  8.                 If Len(arr(x, 2)) < Len(arr(y, 2)) Then
  9.                     temp = arr(x, i)
  10.                     arr(x, i) = arr(y, i)
  11.                     arr(y, i) = temp
  12.                 End If
  13.             Next
  14.         Next
  15.     Next
  16.     Range("d2").Resize(x, 2) = ""
  17.     Range("d2").Resize(x, 2) = arr
  18. End Sub
复制代码
Book1.rar (10.01 KB, 下载次数: 18)
回复

使用道具 举报

发表于 2014-10-19 19:56 | 显示全部楼层
函数解决

Book1.rar

4.28 KB, 下载次数: 5

回复

使用道具 举报

发表于 2014-10-19 20:51 | 显示全部楼层
用辅助列做不用求人,更方便!
回复

使用道具 举报

发表于 2014-10-20 00:05 | 显示全部楼层
  1. Sub test()
  2.    Dim conn As Object
  3.    Set conn = CreateObject("Adodb.connection")
  4.    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
  5.    Range("D2").CopyFromRecordset conn.Execute("select * from [Sheet1$A2:B] order by len(F2) desc")
  6.    conn.Close
  7.    Set conn = Nothing
  8. End Sub
复制代码
我也参与下
回复

使用道具 举报

 楼主| 发表于 2014-10-20 09:13 | 显示全部楼层
谢谢各位大师。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 00:13 , Processed in 0.244461 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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