Excel精英培训网

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

[已解决]求排序代码

[复制链接]
发表于 2016-12-7 23:33 | 显示全部楼层 |阅读模式
URZ9UW@ARI8[6U$JC$MS.png
要求很简单:
将C列排成F列样子就行!一句话,损数据在上面,盈数据在下面,其它都不管。
最佳答案
2016-12-8 14:36
固定只要12000和3000数据,如有多的则略去。剪切的事没管
Sub test2()
Dim ar1(), ar2()
i1% = [c65536].End(3).Row
ar1 = [c1].Resize(i1).Value
ReDim ar2(1 To 3000, 1 To 1)
For i1% = 1 To UBound(ar1)
    If Right(ar1(i1, 1), 1) = "损" Then
       If i2% < 12000 Then i2 = i2 + 1: ar1(i2, 1) = ar1(i1, 1)
    Else
       If i3% < 3000 Then i3 = i3 + 1: ar2(i3, 1) = ar1(i1, 1)
    End If
Next
Range("a1:a" & i3) = ar2
Range("c:c").Clear
Range("c1:c" & i2) = ar1
End Sub
发表于 2016-12-8 06:45 | 显示全部楼层
辅助列d2
=right(c2)
下拉

然后 选中整体数据 , 升序降序随你
回复

使用道具 举报

发表于 2016-12-8 06:58 | 显示全部楼层
下面第三个怎么也有个损字,提问上传表格的好!
回复

使用道具 举报

 楼主| 发表于 2016-12-8 07:23 | 显示全部楼层
1.rar (7.16 KB, 下载次数: 9)
回复

使用道具 举报

 楼主| 发表于 2016-12-8 07:24 | 显示全部楼层
要完整代码
回复

使用道具 举报

发表于 2016-12-8 08:14 | 显示全部楼层
感觉有点难啊,围观一下
回复

使用道具 举报

发表于 2016-12-8 09:08 | 显示全部楼层
  1. Sub Greenhand()
  2. Dim i&, arr, brr()
  3. Application.ScreenUpdating = False
  4. arr = [c1].CurrentRegion.Value
  5. [f1].Resize(UBound(arr), 1) = arr
  6. ReDim brr(1 To UBound(arr), 1 To 1)
  7. For i = 1 To UBound(arr)
  8.     If Right(arr(i, 1), 1) = "盈" Then
  9.         brr(i, 1) = 2 * 10 ^ 4 + Split(Left(arr(i, 1), Len(arr(i, 1)) - 1), "-")(0) * 10 ^ 3 + _
  10.         Split(Left(arr(i, 1), Len(arr(i, 1)) - 1), "-")(1) * 10 ^ 2 + Split(Left(arr(i, 1), Len(arr(i, 1)) - 1), "-")(2) _
  11.         * 10 ^ 1 + Split(Left(arr(i, 1), Len(arr(i, 1)) - 1), "-")(3) * 10 ^ 0
  12.     Else
  13.         brr(i, 1) = 10 ^ 4 + Split(Left(arr(i, 1), Len(arr(i, 1)) - 1), "-")(0) * 10 ^ 3 + _
  14.         Split(Left(arr(i, 1), Len(arr(i, 1)) - 1), "-")(1) * 10 ^ 2 + Split(Left(arr(i, 1), Len(arr(i, 1)) - 1), "-")(2) _
  15.         * 10 ^ 1 + Split(Left(arr(i, 1), Len(arr(i, 1)) - 1), "-")(3) * 10 ^ 0
  16.     End If
  17. Next
  18.     [g1].Resize(UBound(arr), 1) = brr
  19.         Range("f:g").Sort Key1:=Range("g1"), Order1:=xlAscending, Header:= _
  20.         xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  21.         SortMethod:=xlPinYin, DataOption1:=xlSortNorma
  22.     Columns("g:g").Clear
  23. Application.ScreenUpdating = True
  24. End Sub
复制代码

评分

参与人数 1 +6 收起 理由
苏子龙 + 6 来学习

查看全部评分

回复

使用道具 举报

发表于 2016-12-8 10:20 | 显示全部楼层
Sub test()
ar = [c1:c32]
For i% = 1 To UBound(ar)
    ar(i, 1) = Right(ar(i, 1), 1)
Next
[d1].Resize(i - 1) = ar
[c1].Resize(i - 1, 2).Sort [d1]
[d1].Resize(i - 1).Clear
End Sub
回复

使用道具 举报

发表于 2016-12-8 10:49 | 显示全部楼层
  1. Sub tt()
  2.     Dim arr, i%, n%, s%, y%, brr
  3.     arr = Range("c1").CurrentRegion
  4.     ReDim brr(1 To UBound(arr), 1 To 2)
  5.     For i = 1 To UBound(arr)
  6.         If Right(arr(i, 1), 1) = "损" Then
  7.             n = n + 1
  8.             brr(i, 1) = i + n * 100
  9.         End If
  10.     Next
  11.     For i = 1 To UBound(arr)
  12.         If brr(i, 1) > 100 Then
  13.              s = s + 1
  14.              brr(s, 2) = arr(i, 1)
  15.          Else
  16.             y = y + 1
  17.             brr(n + y, 2) = arr(i, 1)
  18.         End If
  19.     Next
  20.     Range("g1").Resize(UBound(arr), 1) = Application.Index(brr, , 2)
  21. End Sub
  22. 凑个热闹
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-12-8 11:00 | 显示全部楼层

新1.rar (39.42 KB, 下载次数: 3)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 02:00 , Processed in 0.673486 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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