EXCEL VBA:自定义排序的动态范围

时间:2017-08-07 10:24:32

标签: excel vba excel-vba sorting

我目前正在学习Excel中的VBA编程艺术,但是我试图弄清楚如何使我的宏动态化。“/ p>

我正在尝试创建一个应该对两列(V& W)进行排序的宏。 V列是名称列表,W列是库存交易的数量,我想根据交易数量(从最大到最小)对名称进行排序。每次运行宏时,名称(行)的数量都会改变,这就是我需要动态范围的原因。

这是我的静态代码:

    Range("V5").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
ActiveWorkbook.Worksheets("Partner attribution").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Partner attribution").Sort.SortFields.Add Key:= _
    Range("W5:W7"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
    xlSortNormal
With ActiveWorkbook.Worksheets("Partner attribution").Sort
    .SetRange Range("V5:W7")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Range("V5").Select

我尝试了一些解决方案,比如引用行计数功能,但由于整个W列都有公式,“空白”单元格将在顶部结束,并且交易的名称和数量在底部结束。

我希望你们中的一些人有能力使我的范围充满活力!

谢谢:-)

3 个答案:

答案 0 :(得分:0)

尝试下面的代码,代码注释中的解释:

Option Explicit

Sub SortColW()

Dim LastRow As Long

' always use fully qualified objects instead of Select
With Worksheets("Partner attribution")
    LastRow = .Cells(.Rows.Count, "W").End(xlUp).Row '<-- get last row in column "W"
    .Sort.SortFields.Clear

    ' use the LastRow variable to define the last row dynamically
    .Sort.SortFields.Add Key:=.Range("W6:W" & LastRow), _
                        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

    With .Sort
        .SetRange Range("V5:W" & LastRow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With    

End Sub   

答案 1 :(得分:0)

动态设置范围

lastrow = Cells(Rows.Count, 21).End(xlUp).Row
Range("V5:W" & lastrow)

答案 2 :(得分:0)

@Shai Rado

我设法找到了以下解决方案,这似乎可以解决问题! : - )

Range("V5").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Sort key1:=Range("W5", Range("W5").End(xlDown)), _
order1:=xlDescending, Header:=xlNo

谢谢! : - )