使用VBA和单元格中的数据对数据进行sorting

我对VBA和macros很新,并且正在寻找一些帮助使用macrossorting数据的帮助。 我已经logging了我所做的,并且已经产生了这个:Macro1 Macro

Range("A19:L28").Select ActiveWorkbook.Worksheets("EuropeanStocks").Sort.SortFields.Clear ActiveWorkbook.Worksheets("EuropeanStocks").Sort.SortFields.Add Key:=Range( _ "h20:h28"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("EuropeanStocks").Sort .SetRange Range("A19:L28") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 

我的问题是我如何使得sorting范围是由单元格中的数据定义的。 对于h20:h28sorting范围的这个例子,20和28部分将是常量,并且在工作表中有一个单元格

例如A1,其中包含需要sorting的列的字母,例如“i”,“j”等。

我如何做到这一点,所以A1被读入sorting范围?

请参阅下面的代码。 您需要将范围(“A1”)中的值放入一个variables中,然后使用该variables在代码中设置范围。

 Dim ws As Worksheet, c As String, rSort As Range, rData As Range ws = Sheets("EuropeanStock") With ws c = .Range("A1").Value Set rData = .Range("A19:L28") Set rSort = .Range(c & "20:" & c & "28") With rData.Sort With .SortFields .Clear .Add Key:=rSort, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal End With .SetRange rData .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End With 

最通用的方法是为要sorting的范围(或包含您想sorting的范围)的范围定义一个命名范围,但是对于这个简单的需求,您可以简单地将Range调用包装到包含sorting范围(如A1)在另一个Range调用,从而获得所需的范围。 例如:

 .SetRange Range(Range("A1")) 

编辑:这假定A1包含全范围参考(例如它包含“A19:L28”)。 如果您想要从其他单元格部分构build目标范围,则可以使用一种解决scheme来构build范围参考,例如:

 .SetRange Range(Range("A1") & "19" & ":" & Range("A2") & "28") 

只需在A1中放置要sorting的列,并用斜杠/ (即a/f/h/s

这将把所有的人逐一sorting:

 Dim NewRange As String, _ DataRange As String, _ Sp() As String Sp = Split(Range("A1"), "/") With ActiveWorkbook.Worksheets("EuropeanStocks") For i = LBound(Sp) To UBound(Sp) NewRange = Sp(i) & "19:" & Sp(i) & "28" DataRange = Sp(i) & "20:" & Sp(i) & "28" With .Sort .SortFields.Clear .SortFields.Add _ Key:=Range(DataRange), _ SortOn:=xlSortOnValues, _ Order:=xlDescending, _ DataOption:=xlSortNormal .SetRange Range(NewRange) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Next i End With