乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>excel</em> <em>vba</em> 按日期排序-ex

<em>excel</em> <em>vba</em> 按日期排序-ex

作者:乔山办公网日期:

返回目录:excel表格制作


假设源数据在A列,排好的数据输出到B列,代码如下:

Sub s()
    Dim arr, i, j, n, tmp
    n = Cells(Rows.Count, 1).End(3).Row
    arr = [a1].Resize(n)
    For i = 2 To n
        For j = n To i Step -1
            If arr(j, 1) < arr(j - 1, 1) Then
                tmp = arr(j, 1)
                arr(j, 1) = arr(j - 1, 1)
                arr(j - 1, 1) = tmp
            End If
        Next
    Next
    [b1].Resize(n) = arr
End Sub


1、假如你要排序的工作表在sheet1,假如你的日期列在J,可以用以下代码: ActiveWorkbook.Worksheets(1).Sort.SortFields.Add Key:=Range("J3:J65535" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(1).Sort
.SetRange Range("A2:AL65535")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
2、后续如果有这种常用功能的VBA你可以选择录制宏,然后做一下,录制完看下VB编辑器的代码,稍作修改即可得到你想要的代码。
3、你想要大一的区域,只要将range的区域改大就可以了。

有些特殊排序要求,对于EXCEL标准功能是无法解决的。这时就可以用VBA来对应。例如:有一张原始数据表,如图:

根据此原始数据建立了一张分类汇总数据表,如图:

要求是,当明细表数据发生变更时,希望汇总表能自动排序。这样的要求,用手工排序就无法自动了。这样的要求只能依赖于VBA。首先编制一个排序的程序,代码如下:

Sub 排序()

Dim mYsheet As String

Dim arr(1 To 3, 1 To 2)

Dim I, J, K As Integer

Dim M_S1 As String '存放交换地区名

Dim M_S2 As Double '存放交换销售额

mYsheet = "汇总排名"

Sheets(mYsheet).Select

'将数值读取到数组中

For I = 1 To 3

    For J = 1 To 2

        arr(I, J) = Cells(I + 1, J + 1)

    Next J

Next I

'排序

For I = 1 To 2

   For J = I + 1 To 3

       If arr(I, 2) < arr(J, 2) Then

          M_S1 = arr(I, 1)

          M_S2 = arr(I, 2)

          arr(I, 1) = arr(J, 1)

          arr(I, 2) = arr(J, 2)

          arr(J, 1) = M_S1

          arr(J, 2) = M_S2

       End If

   Next J

Next I

'将数组的排序结果7a64e59b9ee7ad94364存放到单元格中

For I = 1 To 3

   Cells((I + 1), 2) = arr(I, 1)

Next I

 End Sub

再编制一个单元格内容变更的事件触发程序,代码如下:(注:这个代码要放在原始数据表中)

Private Sub worksheet_change(ByVal target As Range)

 If target.Column <= 4 Then

     排序

  End If

End Sub



假设你的工作表名为“表”,采用如下代码
Sub 排序()
With ActiveWorkbook.Worksheets("表").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A2"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal '降序排列
.SetRange Worksheets("表").Range("A2:C13")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
升序为Order:=xlAscending

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网