使用Excel VBA按列值对工作表数据进行排序

时间:2014-12-19 18:32:26

标签: excel vba sorting excel-vba worksheet-function

我在vba中开发了下一个userform,它从工作表中获取信息以显示信息

enter image description here

我想通过Segment按字母顺序排序所有信息,这是代码:

Function llenarDatosTabla()

    Dim vList As Variant
    Dim ws As Worksheet: Set ws = Worksheets(BD_PRODXSIST)

    ListBox1.Clear

    With ws
        If (IsEmpty(.Range("AA2").Value) = False) Then

            Dim ultimoRenglon As Long: ultimoRenglon = devolverUltimoRenglonDeColumna("A1", BD_PRODXSIST)

            vList = ws.Range("AA2:AA" & ultimoRenglon & ":AL2").Value

            If IsArray(vList) Then
                Me.ListBox1.List = vList
            Else
                Me.ListBox1.AddItem (vList)
            End If

        End If

        Me.ListBox1.ListIndex = -1

    End With




    Set vList = Nothing
    Set ws = Nothing
End Function

如何按'AD'(SEGMENTO)栏排序???

2 个答案:

答案 0 :(得分:11)

您可以使用如下所示的VBA语句按升序对Excel工作表进行排序:

Columns("A:XFD").Sort key1:=Range("AD:AD"), order1:=xlAscending, Header:=xlYes

注意:在列范围Columns("A:XFD")而不是XFD中,输入与您的案例相关的最后一个列,例如Columns("A:DD")

希望这会有所帮助。

答案 1 :(得分:5)

要对数据表进行排序,请将 Excel名称 CurrentRegion 功能结合使用。这比硬编码列引用的风险小,可以通过两个简单的步骤完成。

指定列的首选原因是,如果列错误或稍后更改,您就会对数据进行加密!执行排序时,任何省略列中的单元格将保持原样,成为错误行的一部分。如果您稍后再添加更多列,这将会发生这种情况,除非您记得更新您的VBA。

以下是使用此方法的两个简单步骤。在本例中,我选择了一个包含四列四行的数据表:

enter image description here

我们将按COL3降序排序。其他三列中的单元格共享相同的值,使我们能够轻松验证它们是否都保留在正确的行中。

第1步:在数据表中选择一个不太可能被删除的单元格,例如您打算永久删除的列标题,并为此定义名称细胞。您可以通过选择单元格并直接在工作表上方的Excel“名称”下拉列表中键入来定义名称。在这里,我使用了名称RegionTag:

enter image description here

直接,CurrentRegion可以从中引用整个数据表。如果您编写一行VBA来选择表格,您可以看到它的实际效果:

Range("RegionTag").CurrentRegion.Select

结果如下:

enter image description here

这只是为了说明,显示了Name / CurrentRegion组合的强大功能。我们不需要选择表格来对其进行排序。

第2步:定义第二个名称,这次是您想要排序的列:

enter image description here

确保Name指的是通过单击列标题选择的整个列,而不仅仅是列中的一系列单元格。

那就是它!通过定义这两个名称,我们可以对数据表进行排序,而不必关注自己的行和列,即使以后添加了更多:

Range("RegionTag").CurrentRegion.Sort _
    key1:=Range("SortCol"), order1:=xlDescending, Header:=xlYes

这是我们使用上述声明排序的数据表:

enter image description here