EXCEL VBA学习例子之【升降序】

Excel VBA 单元格排序
本文介绍了一个使用 Excel VBA 实现的简单单元格排序功能,通过点击包含特定符号的单元格来触发对相应列的升序或降序排序,并自动更新该单元格内的符号。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '当发生选择变化事件——(鼠标单击或移动<a href="https://www.baidu.com/s?wd=%E6%96%B9%E5%90%91%E9%94%AE&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPHu9mWPWPhDkPWDLnjKh0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHc1rHDYnjDLPWR4PHDdrHT1rf" target="_blank" class="baidu-highlight">方向键</a>以致不同的单元格获得焦点)
Application.ScreenUpdating = False  '禁止闪屏
Application.EnableEvents = False '禁止事件发生。此行多余!
If Target.Column < 101 And Target.Row = 1 Then  '若被选中的单元格在第1行,且在第1~100列,则
    r = Cells(Rows.Count, 1).End(3).Row '获取A列最后一个非空单元格行号
    If InStr(Cells(Target.Row, Target.Column), "▲") > 0 Then  '如果在选中目标中发现字符▲,则  另,此句可写作 if instr(target,"▲") then更简洁
        Range(Cells(1, 1), Cells(r, 100)).Select '选中1行1列单元格至100列r行单元格这个区域
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear '清除Sheet1的排序关键字
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Cells(2, Target.Column), Cells(r, Target.Column)), _
            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal  'xlDescending 降序 设定排序参数
        With ActiveWorkbook.Worksheets("Sheet1").Sort  '排序
            .SetRange Range(Cells(1, 1), Cells(r, 100)) '设定区域
            .Header = xlYes '有表头
            .MatchCase = False '不区分大小写
            .Orientation = xlTopToBottom '行方向优先
            .SortMethod = xlPinYin '拼音
            .Apply
        End With
        Cells(Target.Row, Target.Column) = Replace(Cells(Target.Row, Target.Column), "▲""▼"'将选中目标的▲替换成▼
        Cells(2, Target.Column).Select '选中当前单元格下方(第二行)的单元格。此句可用target.offset(1,0).select代替
   Else
        Range(Cells(1, 1), Cells(r, 100)).Select
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Cells(2, Target.Column), Cells(r, Target.Column)), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal    'xlAscending 升序
        With ActiveWorkbook.Worksheets("Sheet1").Sort
            .SetRange Range(Cells(1, 1), Cells(r, 100))
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Cells(Target.Row, Target.Column) = Replace(Cells(Target.Row, Target.Column), "▼""▲")
        Cells(2, Target.Column).Select
   End If
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值