【问题标题】:Sorting Worksheet data by column values using Excel VBA使用 Excel VBA 按列值对工作表数据进行排序
【发布时间】:2015-02-18 17:40:15
【问题描述】:

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

我想按分段顺序排列所有信息,代码如下:

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)列排序???

【问题讨论】:

    标签: vba sorting excel worksheet-function


    【解决方案1】:

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

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

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

    希望这会有所帮助。

    【讨论】:

    • 不客气!祝你的项目好运!亲切的问候,
    • 嘿,有时我会收到此错误:执行时间排序参考中的 1004 无效
    • 现在我知道为什么了,因为我是从其他工作表中调用这个函数,所以我必须添加“。”在列之前的范围,我的坏
    【解决方案2】:

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

    比指定列更可取的原因是,如果列错误或它们稍后更改,您将打乱您的数据!执行排序时,任何省略列中的单元格将保留在原处,成为错误行的一部分。如果您稍后添加更多列,这正是会发生的情况,除非您记得更新您的 VBA。

    以下是使用此方法的两个简单步骤。对于这个例子,我选择了一个四列四行的数据表:

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

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

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

    Range("RegionTag").CurrentRegion.Select
    

    这是结果:

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

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

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

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

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

    这是我们使用上述语句排序的数据表:

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 2012-10-28
      • 2019-12-10
      • 2014-08-13
      • 1970-01-01
      • 2015-01-09
      相关资源
      最近更新 更多