网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月11日漏签0天
excel吧 关注:281,176贴子:1,547,846
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 26回复贴,共1页
<<返回excel吧
>0< 加载中...

能不能帮忙弄一个排序的宏

  • 只看楼主
  • 收藏

  • 回复
  • 747519200
  • 多才多E
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我正常操作是选中要排序的区域,然后在像图二那样点排序,有很多,能不能弄一个宏,我选择要排序的区域后在运行宏就可以。



  • 747519200
  • 多才多E
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
排序优先级是CDFE


2025-06-11 09:57:52
广告
  • 菠萝蜜
  • E览无余
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

'可以指定列次序排序,列数可以不限
Option Explicit
Sub abc()
 Dim a, pos, i, j, k, p
 a = [a1].CurrentRegion.Offset(1).Value
 pos = Array(3, 4, 6, 5) 'C、D、F、E 列次序升序
 Call bsort(a, 1, UBound(a, 1) - 1, 1, UBound(a, 2), pos(0))
 For i = 1 To UBound(pos)
  p = 0
  For j = 1 To UBound(a, 1) - 1
   For k = i - 1 To 0 Step -1
    If a(j, pos(k)) <> a(j + 1, pos(k)) Then
     Call bsort(a, p + 1, j, 1, UBound(a, 2), pos(i))
     p = j: Exit For
    End If
   Next
  Next
 Next
 [a1].Offset(1, UBound(a, 2) + 1).Resize(UBound(a, 1) - 1, UBound(a, 2)) = a
End Sub
Function bsort(a, first, last, left, right, key)
 Dim i, j, k, t
 For i = first To last - 1
  For j = first To last + first - 1 - i
   If a(j, key) > a(j + 1, key) Then
    For k = left To right
     t = a(j, k): a(j, k) = a(j + 1, k): a(j + 1, k) = t
    Next
   End If
  Next
 Next
End Function


  • 贴吧用户_QNQGDtW
  • 多才多E
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
录制宏


  • E先生聊
  • E知半解
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
软件的基础功能不就是你的需求解决办法吗?为啥要另外弄个,似乎多此一举啊


  • 可是我看不见
  • 开卷有E
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以来我B站看看,我最近开发了一款Excel无代码自动化办公软件Workflow
你可以完全按照自己的需求来写
【【自制框架】学会Workflow 腰不酸了臀不痛了,提前下班√ 升职加薪√】 https://www.bilibili.com/video/BV1j14y1N7cu/?share_source=copy_web&vd_source=0d213976060a52c1099e992b0823cc8f


  • 菠萝蜜
  • E览无余
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
'限定6列数据排序,纯数据不带标题
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Rows.Count < 2 Or Target.Columns.Count <> 6 Then Exit Sub
 If Target.Rows.Count = Rows.Count Then Exit Sub
 Dim x, y, a, i, j, k, p, pos
 x = Target.Row: y = Target.Column
 a = Cells(x, y).Resize(Target.Rows.Count + 1, 6).Value
 pos = Array(3, 4, 6, 5) '后4列
 Call qsort(a, 1, UBound(a, 1) - 1, 1, 6, pos(0))
 For i = 1 To UBound(pos)
  p = 0
  For j = 1 To UBound(a, 1) - 1
   For k = i - 1 To 0 Step -1
    If a(j, pos(k)) <> a(j + 1, pos(k)) Then
     If j - p > 2 Then Call qsort(a, p + 1, j, 1, 6, pos(i))
     p = j: Exit For
    End If
   Next
  Next
 Next
 Application.EnableEvents = False
 Cells(x, y).Resize(UBound(a, 1) - 1, 6) = a
 Application.EnableEvents = True
End Sub
Function qsort(a, first, last, left, right, key)
 Dim i As Long, j As Long, k As Long, x, t
 i = first: j = last: x = a((first + last) \ 2, key)
 While i <= j
  While a(i, key) < x: i = i + 1: Wend
  While x < a(j, key): j = j - 1: Wend
  If i <= j Then
   For k = left To right
    t = a(i, k): a(i, k) = a(j, k): a(j, k) = t
   Next
   i = i + 1: j = j - 1
  End If
 Wend
 If first < j Then qsort a, first, j, left, right, key
 If i < last Then qsort a, i, last, left, right, key
End Function


  • 747519200
  • 多才多E
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


2025-06-11 09:51:52
广告
  • 747519200
  • 多才多E
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 阿良
  • E夫当关
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Sub 这个能排3个和3个以下key()
With Selection
.Sort .Cells(1, 1), 1, .Cells(1, 2), , 1, .Cells(1, 3), 1, 0
End With
End Sub
=================================================
Sub 超过3个key用这个()
Selection.Offset(-1).Resize(1 + Selection.Rows.Count).AutoFilter
With ActiveSheet.AutoFilter.Sort
With .SortFields
.Clear
.Add2 Key:=Selection.Columns(1)
.Add2 Key:=Selection.Columns(2)
.Add2 Key:=Selection.Columns(3)
.Add2 Key:=Selection.Columns(4)
End With
.Apply
End With
Selection.AutoFilter
End Sub


  • 747519200
  • 多才多E
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 26回复贴,共1页
<<返回excel吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示