我是VBA脚本的新手,想要编写一个VBA脚本来按多列对Excel工作表进行排序。列数可以在工作表中有所不同但我需要考虑两列进行排序,即第一和第二列。最后一栏。例如。这里有两个不同的excel表,我需要根据第一个和第一个进行排序。最后一栏ieID& RANK。
我尝试使用以下方法动态查找最后一列:
LastColumn = Split(sht.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(1, 0), "$")
(0)
但我无法在Range方法中使用上述变量来选择密钥。
抛出运行时错误。
有没有办法使用变量来选择Range或任何其他方式来实现这种排序。
提前致谢。
答案 0 :(得分:0)
如果我正确阅读了您的评论,那么您当前的代码(添加了一些换行符)就是
Set sht = Workbooks("test_vba.xlsx").Worksheets("Sheet1")
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
LastColumn = sht.cells(1,sht.columns.count).End(XlToLeft).Column
sht.Range(Cells(1, 1), _
Cells(1,LastColumn) & Sheets("sheet1").Range("A1").End(xlDown).Row).Sort _
Key1:=sht.Range("A:A"), _
Order1:=xlAscending, _
Key2:=sht.Range(Cells(1,LastColumn), Cells(LastRow,LastColumn)), _
Order2:=xlDescending, _
Header:=xlYes
说Cells(1,LastColumn) & Sheets("sheet1").Range("A1").End(xlDown).Row
的部分存在问题,因为您从第1行的最后一列获取值并将A列中最后一行的行号附加到其中 - 不会给你Range
。
我相信你正在寻找类似的东西:
Dim LastRow As Long
Dim LastColumn As Long
Dim sht As Worksheet
Set sht = Workbooks("test_vba.xlsx").Worksheets("Sheet1")
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
LastColumn = sht.Cells(1, sht.Columns.Count).End(xlToLeft).Column
sht.Range(sht.Cells(1, "A"), sht.Cells(LastRow, LastColumn)).Sort _
Key1:=sht.Columns(1), Order1:=xlAscending, _
Key2:=sht.Columns(LastColumn), Order2:=xlDescending, _
Header:=xlYes