使用vba在excel中对特定列进行排序
问题描述:
我有一个列表,并且希望在列c4:c150值更改时对此列表进行排序。 我在Worksheet_Change下面的代码中使用但不工作!任何机构来帮助我?使用vba在excel中对特定列进行排序
Dim KeyCells As Range
Set KeyCells = Range("C4:C150")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
Columns("A:C").Sort key1:=Range("C4"), order1:=xlDescending, Header:=xlYes
End If
答
假设行#4具有类似的报头:
在工作表中的代码区域安装事件宏:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C5:C150")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Call Zort
Application.EnableEvents = True
End Sub
和在一个标准模块ins高:
Sub Zort()
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("C5:C150") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A4:C150")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
如果第4行没有标题,请调整范围限制。
答
孤单的.Sort
声明在这里工作,虽然它可能不会完全按照你想要的。将整列作为范围进行排序加上设置Header:=xlYes
使Excel相信你的标题在第1行,并将你的实际标题从第1-3行放到表中
因此,排序范围需要稍微修改.. 。示例
Sub Test()
Dim KeyCells As Range, SortRange As Range
Set KeyCells = Range("C4:C150")
Set SortRange = [A3:C150] ' or however large your data range is
If True Then 'simulating positive IF
SortRange.Sort Key1:=SortRange(1, 3), Order1:=xlAscending, Header:=xlYes
End If
End Sub