我需要Excel来检测我拥有的最后一列并对该列进行排序。我有一个宏,每次使用时都会生成一个新列,所以我不能使用常量。
Sub sortyness()
Dim sortdata(A1 & ":", Cells(LastRow, LastColumn)) As Range
ActiveWorkbook.Worksheets("Compiled").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Compiled").Sort.SortFields.Add _
Key:=Range(Sorton), Sorton:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Compiled").Sort
.SetRange Range(sortdata)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
以下是工作表的屏幕截图:
我无法按最后一栏排序。我可以通过查找第1行中没有数据的第一个单元格来定义列,然后将其用作排序的基础吗?我该如何修改我的VBA?
谢谢。
我不知道如何编辑这个东西以使它不显示为重复,但它显然不是重复。我更关心的是在最后一列上运行宏而不是找到最后一列。
答案 0 :(得分:3)
vba排序操作实际上需要的代码少于从录制中获得的代码。
Dim sortdata As Range, LastRow as long, LastColumn as long
With ActiveWorkbook.Worksheets("Compiled")
LastRow = .cells(.rows.count, "A").end(xlup).row
LastColumn = .cells(1, .columns.count).end(xltoleft).column
with .range(.cells(1, 1), .Cells(LastRow, LastColumn))
.Cells.Sort Key1:=.Columns(.columns.count), Order1:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlyes
end with
end with
答案 1 :(得分:3)
关于第二行:
Dim sortdata(A1 & ":", Cells(LastRow, LastColumn)) As Range
这是不如何指定范围。如果您要分配范围,请从A1
开始到lastRow, lastColumn
结束,请考虑以下事项:
Public Sub TestMe()
Dim lastRow As Long: lastRow = 5
Dim lastCol As Long: lastCol = 10
Dim sortData As Range
Set sortData = Range("A1:" & Cells(lastRow, lastCol).Address)
Debug.Print sortData.Address
End Sub
在上述情况下,范围被分配给ActiveSheet
,这并不总是您需要的。如果您想避免分配给ActiveSheet
,您还应该指定工作表:
With Worksheets("Compiled")
Set sortData = .Range("A1:" & .Cells(lastRow, lastCol).Address)
End With
.Range
和.Cells
上方代码中的两个点将确保您引用Worksheets("Compiled")
,从而在将来节省一些问题。
答案 2 :(得分:0)
使用单行VBA对“last”列进行排序:
Columns(ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count)._
Column).Sort key1:=Columns(ActiveSheet._
UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column)
......与...完全相同:
Sub SortLastColumn()
With ActiveSheet.UsedRange
Columns(.Columns(.Columns.Count).Column).Sort key1:=Columns(.Columns(.Columns.Count).Column)
End With
End Sub