通过动态确定键列对Excel工作表进行排序

时间:2017-06-01 20:10:32

标签: excel excel-vba sorting vba

我是VBA脚本的新手,想要编写一个VBA脚本来按多列对Excel工作表进行排序。列数可以在工作表中有所不同但我需要考虑两列进行排序,即第一和第二列。最后一栏。例如。这里有两个不同的excel表,我需要根据第一个和第一个进行排序。最后一栏ieID& RANK。

enter image description here

enter image description here

sheet1 sheet2

我尝试使用以下方法动态查找最后一列:

LastColumn = Split(sht.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(1, 0), "$")
(0)

但我无法在Range方法中使用上述变量来选择密钥。

抛出运行时错误。

有没有办法使用变量来选择Range或任何其他方式来实现这种排序。

提前致谢。

1 个答案:

答案 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