EXCEL VBA:自定义sorting中的dynamic范围

我目前在Excel中学习VBA编程的艺术,但是我已经把我的头撞到墙上,试图弄清楚如何使我的macros观dynamic。

我试图创build一个应该sorting两列(V&W)的macros。 V列是名称列表,W列是股票交易的数量,我想根据交易数量(从最大到最小)对名称进行sorting。 每次运行macros时,名称(行)的数量都会改变,这就是为什么我需要dynamic范围的原因。

这是我的静态代码:

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 

我已经尝试了像引用行计数函数的解决scheme,但是由于整个W列都有公式,所以“空白”单元格将在顶部结束,交易的名称和数量将在底部结束。

我希望你们中的一些人有能力使我的范围dynamic化!

谢谢 :-)

试试下面的代码,代码注释里面的解释:

 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 

dynamic设置范围

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

@Shai Rado

我设法find下面的解决scheme,这似乎是伎俩! 🙂

 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 

虽然谢谢! 🙂