宏更改数据以覆盖以前的数据

时间:2017-02-22 19:54:58

标签: excel vba excel-vba

我记录了一个宏来挑选前十大交易,首先按十个买入排序然后十个卖出。根据D列对数据进行分类后,它会复制交易信息并将其粘贴到另一个单元格中 然后按E列排序以获得最大的销售量,并复制相同的数据范围以粘贴到另一个单元格中 问题是它会复制错误的信息,因为它无法同时按列D和E对数据进行排序。如何让宏复制并粘贴正确的信息?

Sub ttt()
'
' ttt Macro
' top ten trades output
'
' Keyboard Shortcut: Ctrl+Shift+T


' buys

    Rows("3:3").Select
    Selection.AutoFilter

    ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range("D3" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveSheet.AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A5:I14").Select
    Selection.Copy
    Range("K3").Select
    ActiveSheet.paste
    Application.CutCopyMode = False


' sells



    ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range("E3" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveSheet.AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A5:I14").Select
    Selection.Copy
    Range("u3").Select
    ActiveSheet.paste
    Application.CutCopyMode = False

End Sub

2 个答案:

答案 0 :(得分:2)

有一个很大的迹象,比如世界摔跤联合会 - do not do this at home - 你可以尝试这样:

Sub ttt()
'
' ttt Macro
' top ten trades output
'
' Keyboard Shortcut: Ctrl+Shift+T


' buys

    Rows("3:3").Select
    Selection.AutoFilter

    ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range("D3" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveSheet.AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A5:I14").Select
    Selection.Copy
    Range("K3").Select
    ActiveSheet.paste
    Application.CutCopyMode = False


' sells

    Rows("3:3").AutoFilter
    Rows("3:3").AutoFilter



    ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range("E3" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveSheet.AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A5:I14").Select
    Selection.Copy
    Range("u3").Select
    ActiveSheet.paste
    Application.CutCopyMode = False

End Sub

我添加并删除了自动过滤器,因此它应该正常工作。

答案 1 :(得分:1)

如果您使用宏记录器录制这些步骤,您会发现只需在两种排序之间包含以下行即可实现此目的:

ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear

在你的情况下

Activesheet.AutoFilter.Sort.SortFields.Clear

并且应该在尝试.AddSortField之前放置,即列E的那个。(宏记录器也会在第一个Add之前插入行,只是为了安全。)