Range.sort 0应该是第一个

时间:2018-02-09 11:09:14

标签: excel vba excel-vba

我想通过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在结果数据集中排在第一位,排序选项中是否有任何属性可以做到?

3 个答案:

答案 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的文本,则它们将在结尾处进行排序。

请注意,在编辑此特定单元格之前,您不会看到该撇号。