Vba 查找最后一列&;按最后一列排序

Vba 查找最后一列&;按最后一列排序,vba,excel,Vba,Excel,我需要Excel来检测我拥有的最后一列,并对该列进行排序。我有一个宏,每次使用它时都会生成一个新列,所以我不能使用常量 Sub sortyness() Dim sortdata(A1 & ":", Cells(LastRow, LastColumn)) As Range ActiveWorkbook.Worksheets("Compiled").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Compiled").Sort.S

我需要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

多谢各位


我不知道如何编辑这个东西,使它不显示为重复,但它显然不是重复。Mine更关心的是在最后一列上运行宏,而不是查找最后一列。

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

关于第二行:

Dim sortdata(A1 & ":", Cells(LastRow, LastColumn)) As Range
这是而不是分配范围的方式。如果您想指定一个范围,从<代码> A1 < /Cord>开始,在<代码> LSTROW结束,ListType ,请考虑如下:

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
中的两个点将确保您参考
工作表(“已编译”)
,从而避免将来出现一些问题。

用一行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

定义“最后”。最后一列有数据吗?工作表中的最后一列?上一列?最后一列有数据。可能是重复的,不是重复的。非常感谢。非常好。谢谢,我想这就是问题的主要所在。