我想通过VBA对列进行排序:
Range("B2", Range("B2").End(xlDown)).Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlNo
我的数据如下:
60630
9277
10470
3300
83677
251960
7982
0
2000
6000
267942
17825
0
输出:
2000
3300
6000
7982
9277
10470
17825
60630
83677
251960
267942
0
0
我希望0
在结果数据集中排在第一位,排序选项中是否有任何属性可以做到?
答案 0 :(得分:2)
我只是尝试并测试了以下内容,它按预期工作,因为Peh提到你的单元格是否有一个前导撇号(')然后以下将删除该撇号然后排序:
Sub foo()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
'declare and set your worksheet, amend as required
Dim c As Range
Set Rng = ws.Range("B2", ws.Range("B2").End(xlDown))
For Each c In Rng
If Not c.HasFormula Then
c.Formula = c.Value
End If
Next
ws.Range("B2", ws.Range("B2").End(xlDown)).Sort Key1:=ws.Range("B2"), Order1:=xlAscending, Header:=xlNo
End Sub
答案 1 :(得分:2)
如果你不介意丢失任何公式,那么你可以使用:
With Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
.Value = .Value
.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlNo
End With
答案 2 :(得分:1)
您提供的代码完全符合您的要求。当我运行它时,它会将0
s排序到顶部。
但你必须确保所有都是数字。如果将0
格式化为带有撇号'0
的文本,则它们将在结尾处进行排序。
请注意,在编辑此特定单元格之前,您不会看到该撇号。