VBA按升序排序Excel行但排除第一行?

时间:2013-07-02 19:20:32

标签: excel vba sorting excel-vba excel-2007

我成功使用以下代码,一旦我用数据填充工作表,就会根据B列按升序对数据进行排序,第一行是记录标题; B列为REPTNO列。

对于样本数据,我有B1包含REPTNO和B2-B17包含SR0238-SR0253。一切都很好,但是当我清除B2-B17并提交给用户进行测试时,发生了一些奇怪的事情。

我的用户在第2行中输入了一条记录,JF0007的值为REPTNO。当我的下面的代码处理时,我的第一行和第二行正在翻转(J在R之前),导致我的“Header”列在第二行而不是保留在第一行。

除了第一行之外,我还需要更改为仅排序第二行?当我输出到.txt文件时,我的第1行需要保留为第1行。

此情况下rowCnt的值为2(标题行+输入的1个数据行。

EDIT2:

    ' Sort by REPTNO field
    Dim xlSort As XlSortOrder
    xlSort = xlAscending

    If rowCnt > 2 Then
        With Worksheets("Export")

            .range("B2:B" & rowCnt).Sort Key1:=.range("B2"), Order1:=xlSort, Header:=xlNo, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        End With
    End If

当输入1条记录(第2行)时,似乎只交换第一行(标题行)。当我将第二个数据记录输入第3行REPTNO = JF0005时,REPTNO值保持为B1。但是看起来这个代码没有像我想象的那样起作用。

我需要根据REPTNO值对所有行(第2行 - 无论多少行)进行排序。遗憾的是,我目前的代码只是在REPTNO列或B列中订购数据。

1 个答案:

答案 0 :(得分:2)

当没有任何东西可以排序时,看起来排序会有点小问题,因为很明显,当只有一个单元格时,它没有任何可以排序的东西,也可能只是被跳过。

所以我建议先检查一下是否填写了多行,如果没有则跳过排序。

' Sort by REPTNO field
Dim xlSort As XlSortOrder
xlSort = xlAscending

With Worksheets("Export")
    If .Range("B3") <> ""
        .range("B2:B" & rowCnt).Sort Key1:=.range("B2"), Order1:=xlSort, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    End if
End With