2016-04-28 158 views
0

我有一個列表,並且希望在列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 

enter image description hereenter image description here

回答

0

假設行#4具有類似的報頭:

enter image description here

在工作表中的代碼區域安裝事件宏:

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行沒有標題,請調整範圍限制。

0

孤單的.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 
相關問題