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