Excel VBA按特定列对命名范围进行排序
问题描述:
我有一个选定范围,并且在该范围内,我希望按特定列进行排序,以便每行都保持相同,即排序功能只是基于无论我选择哪一列进行排序。Excel VBA按特定列对命名范围进行排序
到目前为止我的代码是这样的:
Sub CustomSortAscendingExcel(ByVal control As IRibbonControl, ByRef cancelDefault As Variant)
Dim selRange As range
Dim usedRange As range
Dim checkRange As range
Dim shtData As Worksheet
Set shtData = Worksheets("Data")
shtData.Activate
shtData.Unprotect
Set selRange = Selection
Set usedRange = returnUsedRange
Set checkRange = Intersect(usedRange, selRange)
If Not Application.Intersect(usedRange, selRange) Is Nothing Then
With ActiveSheet
usedRange.Sort Key1:=selRange, Order1:=xlAscending, DataOption1:=xlSortNormal, MatchCase:=False, SortMethod:=xlPinYin, _
Header:=xlNo, Orientation:=xlSortColumns
.Sort.Apply
End With
而对于排序降序相似。这对column1工作正常。我的问题是,对于第2,3,4列,它只适用于那些在column1中有值的行,而对于那些没有的值。例如,在下面的图像中,按列3排序正确地重排了前9行,但不是最后两行。
任何人都可以提出一种方法来解决这个问题吗?谢谢!
答
我记录在简单的宏,其选择范围( “A1:D5”),适用于过滤器,然后排序基于所述第三列(C)
看看这个升序:
Range("A1:D5").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _
("C1:C5"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
现在,没有太多你需要做的,为什么不使用过滤器来解决您的问题:)
? – 2013-05-02 10:39:18
你是什么意思?我不想从结果 – db579 2013-05-02 10:40:42
中删除那些行,哪个区域在您的代码中引用了'usedRange'? – 2013-05-02 10:42:39