在excel vba中从左到右排序数据

时间:2017-08-29 09:08:47

标签: vba excel-vba excel

我想按字母顺序按列标题对完整的工作表数据进行排序。  下面的代码工作正常但我必须每次手动输入变量(键范围和数据范围)中的数据范围,因为列/行的数量在每个文件中都不同。我在下面的代码尝试了不同的方法。你能告诉我有没有一种方法可以自动选择最后一列?如下面的W是最后一列,文件中的数据和代码应该在最后一列中找到。 同样,最后一行列应该进入范围(例如485是下面代码中的最后一行文件),是否可能?

 Sub sortfile2()
   Dim keyrange As String
    Dim DataRange As String

    keyrange = "A1:W1"
    DataRange = "A1:W485"

    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(keyrange), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range(DataRange)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

4 个答案:

答案 0 :(得分:0)

如果源代码是动态的,您可以使用

bottom= Range("A1").End(xlDown).Row
Set DataRange = Range("A1").CurrentRegion.Resize(bottom - 1).Offset(1)

请注意,CurrentRegion本身还不够。你应该把它与Resize和Offset结合起来。如果您只尝试使用CurrentRegion并使用F8,您可以看到原因。

答案 1 :(得分:0)

是的,可以确定最后一列和最后一行。

如果要确定第一行(1)行中的最后一列,请使用以下代码:

Cells(1, Columns.Count).End(xlToLeft).Column

如果要获取第一列的最后一行,请使用以下命令:

Cells(Rows.Count, 1).End(xlUp).Row

这是第一列/行,因此您可以根据需要进行更改。

答案 2 :(得分:0)

这是一系列数据。

Sub test()
    Dim rngDB As Range
    Dim Ws As Worksheet
    Dim r As Long, c As Long

    Set Ws = ActiveSheet

    With Ws
        r = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        c = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        Set rngDB = .Range("a1", .Cells(r, c))
        rngDB.Select
    End With
End Sub

或者

range("a1").CurrentRegion

答案 3 :(得分:0)

是的,Michal回答和其他source帮助找到确切的所需输出

    'Find the last non-blank cell in row 1
        lCol = Cells(1, Columns.Count).End(xlToLeft).Column
           d = Replace(Cells(1, lCol).Address(True, False), "$1", "")

        'Find the last non-blank cell in column 1
        lRow = Cells(rows.Count, 1).End(xlUp).row
        keyrange = "A1:" & d & 1
        DataRange = "A1:" & d & lRow
'below line is to print (for debugging) the calculated range
   MsgBox (keyrange)
   MsgBox (DataRange)