EXCEL表中,有没有人可以做一列VBA程序,可以使数据填入后自动排序的,不需要手选排序。

EXCEL表中,有没有人可以做一列VBA程序,可以使数据填入后自动排序的,不需要手选排序。
如第一列是名称,第二列是金额1,第三列是金额2,第三列是金额4,第五列是总计,让总计按照从大到小自动排列,可以吗?(需要加分可以写明)

第1个回答  2012-09-21
第一种一输入数据,自动排序
Private Sub Worksheet_Change(ByVal Target As Range)
Range("A:F").Sort Key1:=Range("F2"), Order1:=xlDescending, Header:=xlGuess
End Sub
第二种,右击自动排序
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Range("A:F").Sort Key1:=Range("F2"), Order1:=xlDescending, Header:=xlGuess
End Sub
第三种,活动工作表时自动排序
Private Sub Worksheet_Activate()
Range("A:F").Sort Key1:=Range("F2"), Order1:=xlDescending, Header:=xlGuess
End Sub
第2个回答  推荐于2016-02-09
按ALT+F11
双击左上角的SHEET1
复制下面代码粘贴进去
Private Sub Worksheet_Change(ByVal Target As Range)
Range("A:E").Sort Key1:=Range("E2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub

回到工作表,当在SHEET1表的E列输入数据时,将自动按降序排序.追问

如我需要E2-E10的数量按大小排列,然后 E13-E20的数量按大小排列,可以吗?有什么样的修改

追答

Private Sub Worksheet_Change(ByVal Target As Range)
Range("A2:E10").Sort Key1:=Range("E2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
Range("A13:E20").Sort Key1:=Range("E13"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub

本回答被提问者和网友采纳
第3个回答  2012-09-21
此代码指定E列输入时自动排序
Private Sub Worksheet_Change(ByVal Target As Range)
Dim arr, x&, y&, j&, k
If Target.Column = 5 And Target.Count = 1 And Target.Row > 1 Then
arr = Range("A2:E" & Range("A65536").End(xlUp).Row)
For x = 1 To UBound(arr) - 1
For y = x + 1 To uoubnd(arr)
If arr(x, 5) < arr(y, 5) Then
For j = 1 To UBound(arr, 2)
k = arr(x, j)
arr(x, j) = arr(y, j)
arr(y, j) = k
Next j
End If
Next y
Next x
Range("A2").Resize(UBound(arr), UBound(arr, 2)) = arr
End If
End Sub
相似回答