VBA按升序对Excel行进行排序但不包括第一行?

标签 vba sorting excel excel-2007

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

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

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

我需要更改什么才能仅对第二行及之后的行进行排序,不包括第一行?当我输出到 .txt 文件时,我的第 1 行需要保留为第 1 行。

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

编辑2:

    ' 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 中的数据进行排序。

最佳答案

当没有任何东西要排序时,看起来排序会出现一点问题,因为显然当只有一个单元格时,它没有任何东西要排序,并且可能会被跳过。

所以我建议首先检查是否有不止一行被填充,如果没有则跳过排序。

' 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

关于VBA按升序对Excel行进行排序但不包括第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434038/

相关文章:

excel - 如何使 TEXTJOIN 在溢出范围内工作

vba - Excel VBA : Delete row if Column A contains a number within the string

Excel VBA删除一行中的特定列

vba - 如果单元格 = 0,则将范围复制到主表并从主表中删除范围

javascript - 在我的快速排序中递归

php - 使用 "sort"列排列 MySQL 表中的行

c - 冒泡排序链表

vba:测试形状是否包含文本框

vba - Excel VBA 宏 : Scraping data from site table that spans multiple pages

sql - 我的 vba 代码设计为使用输出参数从存储过程(在 SQL 中)返回一个值,但我无法获得要返回的值