我记录了一个宏来挑选前十大交易,首先按十个买入排序然后十个卖出。根据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
答案 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
并且应该在尝试.Add
新SortField
之前放置,即列E的那个。(宏记录器也会在第一个Add
之前插入行,只是为了安全。)