Excel工作表单元格单击选中事件,VBA动态数值排序

43 篇文章 0 订阅

Excel工作表单元格单击选中事件,VBA动态数值排序(WX公众号:Excel潘谆白说VBA)


前言

面对每月的消费账单,面对月底待还的信用卡或花呗,面对不足三位数的余额,你是否怀疑过账单自己的消费。你是否因此开始记账,每个月记流水,想知道当月中消费金额哪项最多,哪项最少;
你是一名会计,只想用粗略的查看某个月、某个科目下或某个客户经济往来的的变化趋势;
你是一名行政人员,想了解一下每个月某个员工迟到、旷工、加班情况,或当月所有员工迟到、旷工、加班排序;
你是仓库保管人员,想查看某种类的货物当年进、出量排序……
不需要筛选、汇总、计算,只要点击所查单元格,VBA快速帮你排列顺序。


一、运行效果

Excel工作表单元格单击选中事件,VBA动态数值排序

二、代码

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  Dim str As String
  Dim targetUsedRow As Integer
  Dim targetUsedCol As Integer
  Dim sumTarget As String
  Dim sumAll As Integer
  Dim arrA() As Integer
  Dim tmp1 As Integer
  Dim tmp2 As String
  On Error Resume Next
  ActiveSheet.Range("A1:IV65536").Interior.ColorIndex = xlNone
  str = ActiveSheet.Cells(Target.Row, Target.Column).Value
  For i = 1 To 65536         '计算行数
    If ActiveSheet.Cells(i, Target.Column).Value = "" Then
      targetUsedRow = i - 1
      Exit For
    End If
  Next
  For i = 1 To 65536         '计算行数
    If ActiveSheet.Cells(1, i).Value = "" Then
      targetUsedCol = i - 1
      Exit For
  End If
  Next
  If str = "" Or Target.Column > 2 Then  '若选中单元格为空白或超范围,退出触发事件
    Exit Sub
  End If
  For i = 2 To targetUsedRow   '清空单元格
    For j = 5 To 7
    Cells(i, j).Value = ""
    Next
  Next
  ActiveSheet.Columns("E:E").ColumnWidth = 10
  ActiveSheet.Columns("F:F").ColumnWidth = 20
  ReDim arrA(targetUsedRow, 2)
  For i = 2 To targetUsedRow
    If str <> "" And ActiveSheet.Cells(i, Target.Column).Value = str Then
      ActiveSheet.Cells(i, Target.Column).Interior.ColorIndex = 44
      ActiveSheet.Cells(Target.Row, Target.Column).Interior.ColorIndex = 44
      sumTarget = Cells(i, 3).Value
      arrA(m, 0) = sumTarget
      arrA(m, 1) = i
      m = m + 1
    End If
  Next
  If m > 0 Then                  '冒泡排序法
   For j = m To 1 Step -1
    For i = 1 To j
      If arrA(i - 1, 0) < arrA(i, 0) Then
        tmp1 = arrA(i, 0)
        arrA(i, 0) = arrA(i - 1, 0)
        arrA(i - 1, 0) = tmp1
        tmp2 = arrA(i, 1)
        arrA(i, 1) = arrA(i - 1, 1)
        arrA(i - 1, 1) = tmp2
      End If
     Next
    Next
      ActiveSheet.Cells(1, targetUsedCol + 2) = "时间"
      ActiveSheet.Cells(1, targetUsedCol + 3) = "消费类别"
      ActiveSheet.Cells(1, targetUsedCol + 4) = "金额"
    For i = 0 To m
      ActiveSheet.Cells(i + 2, targetUsedCol + 2) = ActiveSheet.Cells(arrA(i, 1), 1).Value
      ActiveSheet.Cells(i + 2, targetUsedCol + 3) = ActiveSheet.Cells(arrA(i, 1), 2).Value
      ActiveSheet.Cells(i + 2, targetUsedCol + 4) = ActiveSheet.Cells(arrA(i, 1), 3).Value
    Next
  End If
End Sub

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值