下面的代码可以很好地执行,但是sort函数的输出是一团糟。
代码的目的是对从B2到L的最后一行的值范围进行排序 根据DD / MM / YYYY HH:MM:SS值
代码用于对文件夹中的一系列文件进行排序,因此仅进行简单的宏录制就不够
Dim Slrow As Long
'Updated last row count to Column B from comment made
Slrow = Cells(Rows.Count, 2).End(xlUp).Row
Range("B2:L" & Slrow).Sort Key1:=Range("B2:L" & Slrow), Order1:=xlAscending, Header:=xlNo
SortWb.Close SaveChanges:=True
下面提供文件下载链接-> Download
使用自定义排序进行排序
答案 0 :(得分:1)
问题出在密钥,您应用它的范围以及选项(看起来像您的数据在第1行中具有标题)。尝试这样的事情:
Range("B1:L" & Slrow).Sort Range("B2:B" & Slrow), xlAscending, , , , , , xlYes, , False, xlSortColumns, xlPinYin, xlSortNormal
答案 1 :(得分:1)
将Key1
更改为您要在Key1:=Range("B1")
进行排序的列。
使用SortOn:=xlSortOnValues
来确保其对值进行排序而不是对文本进行排序(我认为这很有用)。
使其更容易使用Header:=xlYes
自动识别标头。
这应该有效:
Dim ws As Worksheet
Set ws = ActiveSheet 'better specify Worksheets("SheetName")
With ws.Sort
.SortFields.Clear
.SortFields.Add2 Key:=ws.Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ws.Range("B1:L" & Slrow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
如果它不起作用,则您的日期不是日期值,而是文本,您需要将其转换为日期值。
总是总是一个好主意,使用ISO日期格式YYYY-MM-DD hh:mm:ss
,这是唯一一种不会被人类误解并且可以很容易将其排序为文本的格式(例如文件名等。
使用上面的代码对示例进行排序的示例: