所以这是我第一次尝试在Excel中创建一个宏,所以想知道是否有人可以帮助我。我有一个长达几页的电子表格,有几个不同但相似的数据集。不同的数据集适用于不同的客户,我需要将它们分开,但我想创建一个宏来按列B组织不同的数据集,然后按列D.我从这个宏开始:
Sub Sort_Twice()
'
' Sort_Twice Macro
'
'
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B12") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("D2:D12") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:G12")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
因此,这将对A1和G12之间的所有内容进行排序,因为这是我开始录制时突出显示的内容。有关如何允许我突出显示新块并仅在这些字段上运行宏的任何建议?我能找到的唯一的东西就是在这里更改游侠中列出的细胞,但这似乎与我正在尝试做的事情相违背。
答案 0 :(得分:1)
如果您可以命名每个数据集的范围,您可以执行以下操作:
Sub SortRanges()
Dim TargetSheet As Worksheet
Dim RangeName As Variant
Dim CurrentRange As Range
Set TargetSheet = ThisWorkbook.Worksheets(1)
For Each RangeName In Array("Range1", "Range2", "Range3")
Set CurrentRange = TargetSheet.Range(RangeName)
CurrentRange.Sort key1:=CurrentRange.Columns(2), key2:=CurrentRange.Columns(4)
Next
End Sub
它将采用范围名称列表并在第2列和第4列上逐一对其进行排序。如果您无法命名范围,请在代码中创建一系列范围。
答案 1 :(得分:1)
您可以对整个列进行排序。 我不知道你是否必须清除排序字段,我只是把它留在那里。
Sub CDER()
Dim sh As Worksheet
Set sh = Sheets("Sheet1")
With sh
.Sort.SortFields.Clear
.Range("B:B").Sort key1:=.Range("B:B"), order1:=xlAscending, Header:=xlYes
.Range("G:G").Sort key1:=.Range("G:G"), order1:=xlAscending, Header:=xlYes
End With
End Sub